{"id":123,"date":"2026-04-12T22:12:53","date_gmt":"2026-04-12T20:12:53","guid":{"rendered":"http:\/\/ocode360.com\/index.php\/catalogue\/"},"modified":"2026-04-15T21:15:02","modified_gmt":"2026-04-15T19:15:02","slug":"catalogue","status":"publish","type":"page","link":"https:\/\/ocode360.com\/index.php\/catalogue\/","title":{"rendered":"Catalogue"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <title>Tools &amp; Products \u2014 oCode360<\/title>\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\" \/>\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin \/>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Syne:wght@400;600;700;800&#038;family=DM+Mono:ital,wght@0,300;0,400;1,300&#038;family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;1,9..40,300&#038;display=swap\" rel=\"stylesheet\" \/>\n\n  <style>\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n    :root {\n      --bg:        #ffffff;\n      --surface:   #f6f6fa;\n      --border:    #e0e0ec;\n      --accent:    #00b89e;\n      --accent2:   #ff6b35;\n      --text:      #0a0a1f;\n      --muted:     #6b6b85;\n      --subtle:    #eeeef5;\n    }\n\n    html { scroll-behavior: smooth; }\n    body {\n      background: var(--bg);\n      color: var(--text);\n      font-family: 'DM Sans', sans-serif;\n      font-size: 16px;\n      line-height: 1.6;\n      overflow-x: hidden;\n    }\n\n    nav {\n      position: fixed;\n      top: 0; left: 0; right: 0;\n      z-index: 100;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      padding: 1.25rem 5%;\n      background: #f0f0f4;\n      border-bottom: 1px solid var(--border);\n      backdrop-filter: blur(16px);\n    }\n\n    .nav-logo {\n      font-family: 'Syne', sans-serif;\n      font-weight: 800;\n      font-size: 1.2rem;\n      letter-spacing: -0.02em;\n      color: var(--text);\n      text-decoration: none;\n    }\n    .nav-logo span { color: var(--accent); }\n\n    .nav-links { flex: 1; justify-content: center;\n      display: flex;\n      gap: 3.5rem;\n      list-style: none;\n    }\n    .nav-links a {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.95rem;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: var(--muted);\n      text-decoration: none;\n      transition: color 0.2s;\n      position: relative;\n    }\n    .nav-links a::after {\n      content: none;\n      position: absolute;\n      bottom: -4px; left: 0; right: 0;\n      height: 1px;\n      background: var(--accent);\n      transform: scaleX(0);\n      transition: transform 0.2s;\n    }\n    .nav-links a:hover,\n    .nav-links a.active { color: var(--text); }\n    .nav-links a.active::after,\n    .nav-links a:hover::after { transform: scaleX(1); }\n\n    .nav-cta {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.95rem;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: #ffffff;\n      background: var(--accent);\n      border: none;\n      padding: 0.6rem 1.4rem;\n      cursor: pointer;\n      text-decoration: none;\n      transition: opacity 0.2s;\n    }\n    .nav-cta:hover { opacity: 0.85; }\n\n    .nav-icons {\n      display: flex;\n      align-items: center;\n      gap: 0.25rem;\n      margin-right: 0.75rem;\n    }\n    .nav-icon {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      width: 36px;\n      height: 36px;\n      color: var(--muted);\n      text-decoration: none;\n      transition: color 0.2s;\n      position: relative;\n    }\n    .nav-icon:hover { color: var(--accent); }\n    .nav-icon svg { width: 20px; height: 20px; stroke: currentColor; fill: none; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }\n    .nav-cart-count {\n      position: absolute;\n      top: 2px; right: 2px;\n      background: var(--accent);\n      color: #fff;\n      font-family: 'DM Mono', monospace;\n      font-size: 0.55rem;\n      font-weight: 700;\n      min-width: 16px;\n      height: 16px;\n      border-radius: 8px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      padding: 0 3px;\n      opacity: 0;\n      transition: opacity 0.2s;\n    }\n    .nav-cart-count.has-items { opacity: 1; }\n\n    \/* DROPDOWN NAV *\/\n    .nav-dropdown { position: relative; }\n    .nav-dropdown-toggle { cursor: pointer; }\n    .nav-dropdown-menu {\n      display: none;\n      position: absolute;\n      top: 100%;\n      left: 50%;\n      transform: translateX(-50%);\n      background: #f0f0f4;\n      border: 1px solid var(--border);\n      min-width: 160px;\n      z-index: 200;\n      padding: 0.75rem 0 0.4rem;\n    }\n    .nav-dropdown:hover .nav-dropdown-menu { display: block; }\n    .nav-dropdown-menu a {\n      display: block;\n      font-family: 'DM Mono', monospace;\n      font-size: 0.95rem;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: var(--muted);\n      text-decoration: none;\n      padding: 0.55rem 1.25rem;\n      transition: color 0.2s, background 0.2s;\n    }\n    .nav-dropdown-menu a:hover,\n    .nav-dropdown-menu a.active { color: var(--text); background: var(--subtle); }\n\n\n    \/* PAGE HERO *\/\n    .page-hero {\n      min-height: 50vh;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      padding: 3rem max(3rem, calc(50% - 560px)) 1rem;\n      position: relative;\n      overflow: hidden;\n    }\n    .hero-glow {\n      position: absolute;\n      top: -10%; right: -5%;\n      width: 500px; height: 500px;\n      background: radial-gradient(circle, rgba(0,184,158,0.07) 0%, transparent 65%);\n      pointer-events: none;\n    }\n\n    .eyebrow {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.9rem;\n      letter-spacing: 0.15em;\n      text-transform: uppercase;\n      color: var(--accent);\n      margin-bottom: 1.5rem;\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n    }\n    .eyebrow::before {\n      content: '';\n      display: block;\n      width: 32px;\n      height: 1px;\n      background: var(--accent);\n    }\n\n    .page-headline {\n      font-family: 'Syne', sans-serif;\n      font-weight: 800;\n      font-size: clamp(2.5rem, 5vw, 4.5rem);\n      line-height: 1.0;\n      letter-spacing: -0.03em;\n      max-width: 700px;\n      margin-bottom: 0.75rem;\n    }\n    .accent { color: var(--accent); }\n    .accent2 { color: var(--accent2); }\n\n    .page-intro {\n      font-size: 1.1rem;\n      color: var(--muted);\n      max-width: 560px;\n      line-height: 1.75;\n    }\n\n    section { padding: 5rem max(3rem, calc(50% - 560px)); }\n\n    .section-label {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.9rem;\n      letter-spacing: 0.15em;\n      text-transform: uppercase;\n      color: var(--muted);\n      margin-bottom: 3rem;\n      padding-bottom: 1rem;\n      border-bottom: 1px solid var(--border);\n    }\n\n    \/* FILTER BAR *\/\n    .filter-bar {\n      display: flex;\n      gap: 0.75rem;\n      flex-wrap: wrap;\n      margin-bottom: 3rem;\n    }\n\n    .filter-btn {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.68rem;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: var(--muted);\n      background: transparent;\n      border: 1px solid var(--border);\n      padding: 0.45rem 1rem;\n      cursor: pointer;\n      transition: all 0.2s;\n    }\n    .filter-btn:hover,\n    .filter-btn.active {\n      color: #ffffff;\n      background: var(--accent);\n      border-color: var(--accent);\n    }\n\n    \/* PRODUCT GRID *\/\n    .product-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n      gap: 1px;\n      background: var(--border);\n      margin-bottom: 3rem;\n    }\n\n    .product-card {\n      background: var(--bg);\n      padding: 2.25rem;\n      display: flex;\n      flex-direction: column;\n      opacity: 0;\n      transform: translateY(16px);\n      transition: background 0.3s, opacity 0.5s, transform 0.5s;\n      text-decoration: none;\n      color: inherit;\n    }\n    .product-card.visible { opacity: 1; transform: none; }\n    .product-card:hover { background: var(--subtle); }\n\n    .product-type {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.9rem;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      padding: 0.3rem 0.75rem;\n      border: 1px solid var(--border);\n      display: inline-block;\n      margin-bottom: 1.5rem;\n      color: var(--muted);\n      width: fit-content;\n    }\n    .product-type.course   { color: #7c3aed; border-color: rgba(124,58,237,0.3); }\n    .product-type.guide    { color: var(--accent2); border-color: rgba(255,107,53,0.3); }\n    .product-type.template { color: var(--accent); border-color: rgba(0,184,158,0.3); }\n    .product-type.package  { color: #0369a1; border-color: rgba(3,105,161,0.3); }\n    .product-type.session  { color: #b45309; border-color: rgba(180,83,9,0.3); }\n\n    .product-title {\n      font-family: 'Syne', sans-serif;\n      font-weight: 700;\n      font-size: 1.1rem;\n      line-height: 1.25;\n      margin-bottom: 0.75rem;\n    }\n\n    .product-desc {\n      color: var(--muted);\n      font-size: 0.88rem;\n      line-height: 1.65;\n      flex: 1;\n      margin-bottom: 1.5rem;\n    }\n\n    .product-footer {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n    }\n\n    .product-price {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.8rem;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: var(--muted);\n    }\n    .product-price.highlight {\n      font-family: 'Syne', sans-serif;\n      font-weight: 800;\n      font-size: 1.1rem;\n      letter-spacing: 0;\n      color: var(--text);\n    }\n    .product-price.free { color: var(--accent); font-family: 'Syne', sans-serif; font-weight: 800; font-size: 1.1rem; letter-spacing: 0; }\n\n    .product-btn {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.68rem;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: var(--accent);\n      text-decoration: none;\n      display: flex;\n      align-items: center;\n      gap: 0.4rem;\n      transition: gap 0.2s;\n    }\n    .product-btn:hover { gap: 0.7rem; }\n    .product-btn::after { content: '\u2192'; }\n\n    .coming-soon {\n      opacity: 0.4;\n      pointer-events: none;\n    }\n    .coming-soon.visible { opacity: 0.4; }\n\n    .coming-soon-badge {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.6rem;\n      letter-spacing: 0.1em;\n      text-transform: uppercase;\n      color: var(--muted);\n      border: 1px dashed var(--border);\n      padding: 0.2rem 0.6rem;\n    }\n\n    \/* SESSIONS *\/\n    .sessions-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n      gap: 1px;\n      background: var(--border);\n      margin-bottom: 3rem;\n    }\n\n    .session-card {\n      background: var(--bg);\n      padding: 2.25rem;\n      display: flex;\n      flex-direction: column;\n      text-decoration: none;\n      color: inherit;\n      transition: background 0.3s;\n    }\n    .session-card:hover { background: var(--subtle); }\n\n    .session-label {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.9rem;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      padding: 0.3rem 0.75rem;\n      border: 1px solid var(--border);\n      display: inline-block;\n      margin-bottom: 1.5rem;\n      color: var(--accent);\n      border-color: rgba(0,184,158,0.3);\n      width: fit-content;\n    }\n\n    .session-title {\n      font-family: 'Syne', sans-serif;\n      font-weight: 700;\n      font-size: 1.1rem;\n      line-height: 1.25;\n      margin-bottom: 0.75rem;\n    }\n\n    .session-desc {\n      color: var(--muted);\n      font-size: 0.88rem;\n      line-height: 1.65;\n      flex: 1;\n      margin-bottom: 1.5rem;\n    }\n\n    .session-footer {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n    }\n\n    .session-price {\n      font-family: 'Syne', sans-serif;\n      font-weight: 800;\n      font-size: 1.1rem;\n      color: var(--text);\n    }\n    .session-price.free { color: var(--accent); }\n\n    .session-cta {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.68rem;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: var(--accent);\n      text-decoration: none;\n      display: flex;\n      align-items: center;\n      gap: 0.4rem;\n      transition: gap 0.2s;\n    }\n    .session-cta:hover { gap: 0.7rem; }\n    .session-cta::after { content: '\u2192'; }\n\n    \/* CURRENCY NOTE *\/\n    .currency-note {\n      padding: 1.25rem 2rem;\n      border-left: 3px solid var(--accent);\n      background: var(--surface);\n      margin-bottom: 3rem;\n    }\n    .currency-note p {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.72rem;\n      letter-spacing: 0.04em;\n      color: var(--muted);\n      line-height: 1.7;\n    }\n    .currency-note strong { color: var(--text); }\n\n    footer {\n      padding: 3rem max(3rem, calc(50% - 560px));\n      border-top: 1px solid var(--border);\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      flex-wrap: wrap;\n      gap: 1rem;\n    }\n\n    .footer-logo {\n      font-family: 'Syne', sans-serif;\n      font-weight: 800;\n      font-size: 1rem;\n      color: var(--text);\n    }\n    .footer-logo span { color: var(--accent); }\n\n    .footer-copy {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.7rem;\n      letter-spacing: 0.06em;\n      color: var(--muted);\n    }\n\n    @keyframes fadeUp {\n      from { opacity: 0; transform: translateY(20px); }\n      to { opacity: 1; transform: none; }\n    }\n    .animate-in { opacity: 0; animation: fadeUp 0.6s ease forwards; }\n    .delay-1 { animation-delay: 0.2s; }\n    .delay-2 { animation-delay: 0.35s; }\n    .delay-3 { animation-delay: 0.5s; }\n\n    @media (max-width: 768px) {\n      nav { padding: 1rem 5%; }\n      .nav-links { flex: 1; justify-content: center; display: none; }\n      .page-hero, section { padding-left: 1.5rem; padding-right: 1.5rem; }\n      footer { padding: 2rem max(3rem, calc(50% - 560px)); }\n    }\n  <\/style>\n<\/head>\n<body>\n\n  <nav>\n    <a href=\"\/\" class=\"nav-logo\">o<span>Code<\/span>360<\/a>\n    <ul class=\"nav-links\">\n      <li><a href=\"\/\">Home<\/a><\/li>\n      <li><a href=\"\/index.php\/services\/\">Services<\/a><\/li>\n      <li><a href=\"\/index.php\/catalogue\/\">Courses<\/a><\/li>\n      <li><a href=\"#\">Coaching<\/a><\/li>\n      <li><a href=\"\/index.php\/workshops\/\">Workshops<\/a><\/li>\n      <li><a href=\"\/index.php\/shop\/\" class=\"active\">Tools<\/a><\/li>\n      <li><a href=\"\/index.php\/catalogue\/\" class=\"active\">Tools<\/a><\/li>\n      <li><a href=\"#\">About Us<\/a><\/li>\n      <li class=\"nav-dropdown\">\n      <a href=\"#\" class=\"nav-dropdown-toggle\">Other \u25be<\/a>\n      <div class=\"nav-dropdown-menu\">\n        <a href=\"\/index.php\/resources\/\">Resources<\/a>\n      <\/div>\n    <\/li>\n    <\/ul>\n    <div class=\"nav-icons\">\n      <a href=\"\/index.php\/wishlist\/\" class=\"nav-icon\" title=\"Wishlist\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"\/><\/svg>\n      <\/a>\n      <a href=\"\/index.php\/cart\/\" class=\"nav-icon\" title=\"Cart\" id=\"nav-cart-link\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z\"\/><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"\/><path d=\"M16 10a4 4 0 0 1-8 0\"\/><\/svg>\n        <span class=\"nav-cart-count\" id=\"nav-cart-count\"><\/span>\n      <\/a>\n      <a href=\"\/index.php\/my-account\/\" class=\"nav-icon\" title=\"My Account\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"\/><circle cx=\"12\" cy=\"7\" r=\"4\"\/><\/svg>\n      <\/a>\n    <\/div>\n    <a href=\"\/index.php\/book-a-call\/\" class=\"nav-cta\">Book a Call<\/a>\n  <\/nav>\n\n  <!-- HERO -->\n  <div class=\"page-hero\">\n    <div class=\"hero-glow\"><\/div>\n    <div class=\"eyebrow animate-in delay-1\">Digital Products &amp; Resources<\/div>\n    <h1 class=\"page-headline animate-in delay-2\">Practical tools for <span class=\"accent\">analytics practitioners.<\/span><\/h1>\n    <p class=\"page-intro animate-in delay-3\">Courses, guides, templates, and consulting packages \u2014 built from real client work. Buy once, apply immediately.<\/p>\n  <\/div>\n\n  <!-- MAIN SECTION -->\n  <section>\n\n    <!-- FILTER BAR -->\n    <div class=\"filter-bar\">\n      <button class=\"filter-btn active\" data-filter=\"all\">All<\/button>\n      <button class=\"filter-btn\" data-filter=\"courses\">Online Courses<\/button>\n      <button class=\"filter-btn\" data-filter=\"guides\">Guides &amp; E-Books<\/button>\n      <button class=\"filter-btn\" data-filter=\"templates\">Templates<\/button>\n      <button class=\"filter-btn\" data-filter=\"packages\">Consulting Packages<\/button>\n    <\/div>\n\n    <!-- ONLINE COURSES -->\n    <div data-category=\"courses\">\n      <div class=\"section-label\">\/\/ Online courses<\/div>\n      <div class=\"product-grid\">\n\n        <div class=\"product-card coming-soon\">\n          <span class=\"product-type course\">Course<\/span>\n          <h3 class=\"product-title\">SQL for Business Analysts \u2014 Zero to Confident<\/h3>\n          <p class=\"product-desc\">A practical, project-based course covering SQL from fundamentals to advanced analytical queries. Built for analysts, not engineers.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">R 1,997<\/span>\n            <span class=\"coming-soon-badge\">Coming Q3 2025<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"product-card coming-soon\">\n          <span class=\"product-type course\">Course<\/span>\n          <h3 class=\"product-title\">Power BI Foundations \u2014 From Raw Data to Dashboard<\/h3>\n          <p class=\"product-desc\">Build your first end-to-end Power BI report. Covers data connections, Power Query, data modelling, DAX basics, and report design.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">R 2,497<\/span>\n            <span class=\"coming-soon-badge\">Coming Q3 2025<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"product-card coming-soon\">\n          <span class=\"product-type course\">Course<\/span>\n          <h3 class=\"product-title\">Python for Data Analysts \u2014 Practical Essentials<\/h3>\n          <p class=\"product-desc\">Learn pandas, data wrangling, and visualisation using real business datasets. No prior programming experience required.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">R 2,497<\/span>\n            <span class=\"coming-soon-badge\">Coming Q4 2025<\/span>\n          <\/div>\n        <\/div>\n\n      <\/div>\n    <\/div>\n\n    <!-- GUIDES & E-BOOKS -->\n    <div data-category=\"guides\">\n      <div class=\"section-label\">\/\/ Guides &amp; e-books<\/div>\n      <div class=\"product-grid\">\n\n        <div class=\"product-card\">\n          <span class=\"product-type guide\">E-Book<\/span>\n          <h3 class=\"product-title\">The CEO Mindset \u2014 Strategic Data Analytics for Small Business Leaders<\/h3>\n          <p class=\"product-desc\">A practical 10-step framework for small business leaders who want to use data strategically \u2014 without a data team or technical background. Instant PDF download.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">R 29<\/span>\n            <a href=\"\/index.php\/?add-to-cart=36\" class=\"product-btn\">Buy Now<\/a>\n          <\/div>\n        <\/div>\n\n        <div class=\"product-card coming-soon\">\n          <span class=\"product-type guide\">Guide<\/span>\n          <h3 class=\"product-title\">The KPI Playbook \u2014 Design Metrics That Drive Decisions<\/h3>\n          <p class=\"product-desc\">Step-by-step guide to designing, implementing, and reviewing KPIs that your team actually acts on. Includes worked examples and templates.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">R 199<\/span>\n            <span class=\"coming-soon-badge\">Coming Soon<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"product-card coming-soon\">\n          <span class=\"product-type guide\">Guide<\/span>\n          <h3 class=\"product-title\">The 30-Day SQL Challenge<\/h3>\n          <p class=\"product-desc\">Structured daily SQL exercises to build real querying confidence in one month. Designed for analysts who know the basics and want to go deeper.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">R 149<\/span>\n            <span class=\"coming-soon-badge\">Coming Soon<\/span>\n          <\/div>\n        <\/div>\n\n      <\/div>\n    <\/div>\n\n    <!-- TEMPLATES -->\n    <div data-category=\"templates\">\n      <div class=\"section-label\">\/\/ Templates<\/div>\n      <div class=\"product-grid\">\n\n        <div class=\"product-card coming-soon\">\n          <span class=\"product-type template\">Template<\/span>\n          <h3 class=\"product-title\">SQL Analytics Starter Pack<\/h3>\n          <p class=\"product-desc\">20 production-ready SQL queries for common business analysis tasks \u2014 annotated, documented, and ready to adapt to your schema.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">R 99<\/span>\n            <span class=\"coming-soon-badge\">Coming Soon<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"product-card coming-soon\">\n          <span class=\"product-type template\">Template<\/span>\n          <h3 class=\"product-title\">Python Data Cleaning Notebook<\/h3>\n          <p class=\"product-desc\">Annotated Jupyter notebook for the 15 most common data cleaning tasks using pandas. Download, adapt, and use immediately.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">R 99<\/span>\n            <span class=\"coming-soon-badge\">Coming Soon<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"product-card coming-soon\">\n          <span class=\"product-type template\">Template<\/span>\n          <h3 class=\"product-title\">Power BI Report Template Pack<\/h3>\n          <p class=\"product-desc\">5 pre-built Power BI report templates for sales, finance, operations, HR, and marketing. Clean layouts, consistent styling, ready to connect your data.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">R 349<\/span>\n            <span class=\"coming-soon-badge\">Coming Soon<\/span>\n          <\/div>\n        <\/div>\n\n      <\/div>\n    <\/div>\n\n    <!-- CONSULTING PACKAGES -->\n    <div data-category=\"packages\">\n      <div class=\"section-label\">\/\/ Consulting packages<\/div>\n      <div class=\"product-grid\">\n\n        <div class=\"product-card\">\n          <span class=\"product-type package\">Package<\/span>\n          <h3 class=\"product-title\">Data Dashboard Setup \u2014 Starter<\/h3>\n          <p class=\"product-desc\">1 data source \u00b7 up to 3 dashboard pages \u00b7 KPI alignment \u00b7 team walkthrough. Ideal for businesses replacing manual reporting with a live dashboard. 2\u20133 week delivery.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">R 18,500<\/span>\n            <a href=\"\/index.php\/book-a-call\/\" class=\"product-btn\">Get Started<\/a>\n          <\/div>\n        <\/div>\n\n        <div class=\"product-card\">\n          <span class=\"product-type package\">Package<\/span>\n          <h3 class=\"product-title\">Data Dashboard Setup \u2014 Standard<\/h3>\n          <p class=\"product-desc\">2\u20133 data sources \u00b7 up to 5 dashboard pages \u00b7 ETL guidance \u00b7 stakeholder training. For businesses consolidating data from multiple systems. 3\u20134 week delivery.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">R 35,000<\/span>\n            <a href=\"\/index.php\/book-a-call\/\" class=\"product-btn\">Get Started<\/a>\n          <\/div>\n        <\/div>\n\n        <div class=\"product-card\">\n          <span class=\"product-type package\">Package<\/span>\n          <h3 class=\"product-title\">Data Dashboard Setup \u2014 Enterprise<\/h3>\n          <p class=\"product-desc\">Multiple data sources \u00b7 custom scope \u00b7 full documentation. For mid-market businesses with complex data environments. Scope and price agreed after discovery call.<\/p>\n          <div class=\"product-footer\">\n            <span class=\"product-price highlight\">Price on request<\/span>\n            <a href=\"\/index.php\/book-a-call\/\" class=\"product-btn\">Enquire<\/a>\n          <\/div>\n        <\/div>\n\n      <\/div>\n    <\/div>\n\n    <!-- CURRENCY NOTE -->\n    <div class=\"currency-note\">\n      <p><strong>International clients:<\/strong> All prices shown in South African Rand (ZAR). USD pricing coming soon \u2014 contact us directly for USD quotes in the meantime. Payment via PayPal for international orders.<\/p>\n    <\/div>\n\n    <!-- 1:1 SESSIONS -->\n    <div class=\"section-label\">\/\/ Work with me \u2014 1:1 sessions<\/div>\n    <div class=\"sessions-grid\">\n\n      <a href=\"\/index.php\/book-a-call\/\" class=\"session-card\">\n        <span class=\"session-label\">Free \u00b7 30 min<\/span>\n        <div class=\"session-title\">Free Discovery Consultation<\/div>\n        <p class=\"session-desc\">A no-obligation conversation about your data situation, challenges, and what the right next step looks like \u2014 consulting, training, or tools.<\/p>\n        <div class=\"session-footer\">\n          <span class=\"session-price free\">Free<\/span>\n          <span class=\"session-cta\">Book Free Call<\/span>\n        <\/div>\n      <\/a>\n\n      <a href=\"\/index.php\/book-a-call\/\" class=\"session-card\">\n        <span class=\"session-label\">Paid \u00b7 30 min<\/span>\n        <div class=\"session-title\">1:1 Strategy Session<\/div>\n        <p class=\"session-desc\">A focused session to work through a specific data, analytics, or BI challenge. Dashboard design, data modelling, reporting process, or career direction.<\/p>\n        <div class=\"session-footer\">\n          <span class=\"session-price\">R 150<\/span>\n          <span class=\"session-cta\">Book Session<\/span>\n        <\/div>\n      <\/a>\n\n    <\/div>\n\n  <\/section>\n\n  <!-- FOOTER -->\n  <footer>\n    <div class=\"footer-logo\">o<span>Code<\/span>360<\/div>\n    <div class=\"footer-copy\">\u00a9 2025 oCode360 \u00b7 JVW Business Solutions \u00b7 Cape Town, South Africa<\/div>\n  <\/footer>\n\n  <script>\n    const observer = new IntersectionObserver((entries) => {\n      entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('visible'); });\n    }, { threshold: 0.08 });\n    document.querySelectorAll('.product-card').forEach(el => observer.observe(el));\n\n    document.querySelectorAll('.filter-btn').forEach(btn => {\n      btn.addEventListener('click', () => {\n        document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));\n        btn.classList.add('active');\n        const filter = btn.dataset.filter;\n        document.querySelectorAll('[data-category]').forEach(section => {\n          section.style.display = filter === 'all' || section.dataset.category === filter ? '' : 'none';\n        });\n      });\n    });\n  <\/script>\n  <script>\n    (function() {\n      fetch('\/wp-json\/wc\/store\/v1\/cart', { credentials: 'include' })\n        .then(function(r) { return r.json(); })\n        .then(function(data) {\n          var count = data.items_count || 0;\n          var badge = document.getElementById('nav-cart-count');\n          if (badge && count > 0) {\n            badge.textContent = count;\n            badge.classList.add('has-items');\n          }\n        })\n        .catch(function() {});\n    })();\n  <\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Tools &amp; Products \u2014 oCode360 oCode360 Home Services Courses Coaching Workshops Tools Tools About Us Other \u25be Resources Book a Call Digital Products &amp; Resources Practical tools for analytics practitioners. Courses, guides, templates, and consulting packages \u2014 built from real client work. Buy once, apply immediately. All Online Courses Guides &amp; E-Books Templates Consulting Packages [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"ocode360-blank","meta":{"footnotes":""},"class_list":["post-123","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ocode360.com\/index.php\/wp-json\/wp\/v2\/pages\/123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ocode360.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ocode360.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ocode360.com\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ocode360.com\/index.php\/wp-json\/wp\/v2\/comments?post=123"}],"version-history":[{"count":33,"href":"https:\/\/ocode360.com\/index.php\/wp-json\/wp\/v2\/pages\/123\/revisions"}],"predecessor-version":[{"id":406,"href":"https:\/\/ocode360.com\/index.php\/wp-json\/wp\/v2\/pages\/123\/revisions\/406"}],"wp:attachment":[{"href":"https:\/\/ocode360.com\/index.php\/wp-json\/wp\/v2\/media?parent=123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}