{"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-13T21:27:07","modified_gmt":"2026-04-13T19:27:07","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>Shop \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    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      border-bottom: 1px solid var(--border);\n      background: #f0f0f4;\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: 1.05rem;\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: '';\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.85rem;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: #fff;\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    \/* \u2500\u2500 NAV ICONS \u2500\u2500 *\/\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\n    \/* PAGE HERO *\/\n    .page-hero {\n      padding: 9rem max(3rem, calc(50% - 560px));\n      background: var(--surface);\n      border-bottom: 1px solid var(--border);\n    }\n\n    .eyebrow {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.72rem;\n      letter-spacing: 0.15em;\n      text-transform: uppercase;\n      color: var(--accent);\n      margin-bottom: 1.25rem;\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.2rem, 4.5vw, 4rem);\n      line-height: 1.05;\n      letter-spacing: -0.03em;\n      max-width: 680px;\n      margin-bottom: 1.25rem;\n    }\n\n    .page-intro {\n      font-size: 1.05rem;\n      color: var(--muted);\n      max-width: 520px;\n      line-height: 1.75;\n    }\n\n    \/* FILTER TABS *\/\n    .filter-row {\n      padding: 2rem 4rem;\n      border-bottom: 1px solid var(--border);\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n      flex-wrap: wrap;\n      background: var(--bg);\n      position: sticky;\n      top: 72px;\n      z-index: 50;\n    }\n\n    .filter-label {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.68rem;\n      letter-spacing: 0.1em;\n      text-transform: uppercase;\n      color: var(--muted);\n      margin-right: 0.5rem;\n    }\n\n    .filter-btn {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.7rem;\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 1.1rem;\n      cursor: pointer;\n      transition: all 0.2s;\n    }\n    .filter-btn:hover { border-color: var(--accent); color: var(--accent); }\n    .filter-btn.active {\n      color: #fff;\n      background: var(--accent);\n      border-color: var(--accent);\n    }\n\n    \/* SHOP SECTIONS *\/\n    .shop-section {\n      padding: 4rem max(3rem, calc(50% - 560px));\n    }\n\n    .section-heading {\n      font-family: 'Syne', sans-serif;\n      font-weight: 700;\n      font-size: 1.4rem;\n      letter-spacing: -0.01em;\n      color: var(--text);\n      margin-bottom: 2.5rem;\n      padding-bottom: 1rem;\n      border-bottom: 2px solid var(--accent);\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n    }\n\n    .section-count {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.7rem;\n      letter-spacing: 0.08em;\n      color: var(--muted);\n      font-weight: 400;\n    }\n\n    \/* PRODUCT GRID *\/\n    .product-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n      gap: 1px;\n      background: var(--border);\n      margin-bottom: 3rem;\n    }\n\n    .product-card {\n      background: var(--bg);\n      padding: 2rem;\n      display: flex;\n      flex-direction: column;\n      transition: background 0.25s;\n      text-decoration: none;\n      color: inherit;\n      opacity: 0;\n      transform: translateY(12px);\n      transition: background 0.25s, opacity 0.4s, transform 0.4s;\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.62rem;\n      letter-spacing: 0.1em;\n      text-transform: uppercase;\n      padding: 0.25rem 0.65rem;\n      border: 1px solid var(--border);\n      display: inline-block;\n      margin-bottom: 1.25rem;\n      width: fit-content;\n      color: var(--muted);\n    }\n    .product-type.course  { color: #7c3aed; border-color: rgba(124,58,237,0.3); background: rgba(124,58,237,0.05); }\n    .product-type.guide   { color: var(--accent); border-color: rgba(0,184,158,0.3); background: rgba(0,184,158,0.05); }\n    .product-type.template { color: var(--accent2); border-color: rgba(255,107,53,0.3); background: rgba(255,107,53,0.05); }\n    .product-type.package { color: #0369a1; border-color: rgba(3,105,161,0.3); background: rgba(3,105,161,0.05); }\n    .product-type.session { color: #b45309; border-color: rgba(180,83,9,0.3); background: rgba(180,83,9,0.05); }\n\n    .product-title {\n      font-family: 'Syne', sans-serif;\n      font-weight: 700;\n      font-size: 1.05rem;\n      line-height: 1.25;\n      margin-bottom: 0.65rem;\n      color: var(--text);\n    }\n\n    .product-desc {\n      font-size: 0.88rem;\n      color: var(--muted);\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      margin-top: auto;\n    }\n\n    .product-price {\n      font-family: 'Syne', sans-serif;\n      font-weight: 800;\n      font-size: 1.3rem;\n      color: var(--text);\n    }\n    .product-price.free { color: var(--accent); }\n    .product-price.quote { font-size: 0.85rem; font-weight: 600; color: var(--muted); font-family: 'DM Mono', monospace; }\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      border: 1px solid var(--accent);\n      padding: 0.45rem 0.9rem;\n    }\n    .product-btn:hover { gap: 0.7rem; background: var(--accent); color: #fff; }\n    .product-btn::after { content: '\u2192'; }\n\n    \/* COMING SOON CARD *\/\n    .product-card.coming-soon {\n      opacity: 0.5;\n      pointer-events: none;\n    }\n    .product-card.coming-soon.visible { opacity: 0.45; }\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.25rem 0.65rem;\n    }\n\n    \/* SESSIONS STRIP *\/\n    .sessions-strip {\n      margin: 0 4rem 4rem;\n      border: 1px solid var(--border);\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 1px;\n      background: var(--border);\n    }\n\n    .session-card {\n      background: var(--bg);\n      padding: 2.5rem;\n      display: flex;\n      align-items: flex-start;\n      gap: 2rem;\n      text-decoration: none;\n      color: inherit;\n      transition: background 0.25s;\n    }\n    .session-card:hover { background: var(--subtle); }\n\n    .session-icon {\n      width: 48px;\n      height: 48px;\n      border: 1px solid var(--border);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      font-size: 1.25rem;\n      flex-shrink: 0;\n    }\n\n    .session-body {}\n\n    .session-label {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.62rem;\n      letter-spacing: 0.1em;\n      text-transform: uppercase;\n      color: var(--accent);\n      margin-bottom: 0.4rem;\n    }\n\n    .session-title {\n      font-family: 'Syne', sans-serif;\n      font-weight: 700;\n      font-size: 1.05rem;\n      margin-bottom: 0.5rem;\n    }\n\n    .session-desc {\n      font-size: 0.88rem;\n      color: var(--muted);\n      line-height: 1.6;\n      margin-bottom: 1rem;\n    }\n\n    .session-meta {\n      display: flex;\n      align-items: center;\n      gap: 1.5rem;\n    }\n\n    .session-price {\n      font-family: 'Syne', sans-serif;\n      font-weight: 800;\n      font-size: 1.2rem;\n    }\n    .session-price.free { color: var(--accent); }\n\n    .session-btn {\n      font-family: 'DM Mono', monospace;\n      font-size: 0.68rem;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: #fff;\n      background: var(--accent);\n      padding: 0.5rem 1rem;\n      text-decoration: none;\n      transition: opacity 0.2s;\n    }\n    .session-btn:hover { opacity: 0.85; }\n    .session-btn.outline {\n      background: transparent;\n      color: var(--accent);\n      border: 1px solid var(--accent);\n    }\n    .session-btn.outline:hover { background: var(--accent); color: #fff; opacity: 1; }\n\n    \/* USD NOTE *\/\n    .currency-note {\n      margin: 0 4rem 4rem;\n      padding: 1.25rem 2rem;\n      border-left: 3px solid var(--accent);\n      background: var(--surface);\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    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      background: var(--surface);\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    .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(12px); }\n      to { opacity: 1; transform: none; }\n    }\n    .animate-in { opacity: 0; animation: fadeUp 0.5s ease forwards; }\n    .delay-1 { animation-delay: 0.15s; }\n    .delay-2 { animation-delay: 0.28s; }\n    .delay-3 { animation-delay: 0.4s; }\n\n    @media (max-width: 900px) {\n      .sessions-strip { grid-template-columns: 1fr; margin: 0 1.5rem 3rem; }\n    }\n    @media (max-width: 768px) {\n      nav { padding: 1rem 5%; }\n      .nav-links { flex: 1; justify-content: center; display: none; }\n      .page-hero { padding: 7rem max(3rem, calc(50% - 560px)); }\n      .filter-row { padding: 1.25rem 1.5rem; top: 64px; }\n      .shop-section { padding: 3rem max(3rem, calc(50% - 560px)); }\n      .sessions-strip { margin: 0 1.5rem 3rem; }\n      .currency-note { margin: 0 1.5rem 3rem; }\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\/\" class=\"active\">Shop<\/a><\/li>\n      <li><a href=\"#\">Courses<\/a><\/li>\n      <li><a href=\"\/index.php\/workshops\/\">Workshops<\/a><\/li>\n      <li><a href=\"#\">Tools<\/a><\/li>\n      <li><a href=\"\/index.php\/resources\/\">Resources<\/a><\/li>\n      <li><a href=\"#\">About<\/a><\/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=\"eyebrow animate-in delay-1\">Digital Products &amp; Resources<\/div>\n    <h1 class=\"page-headline animate-in delay-2\">Practical tools for analytics practitioners.<\/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  <!-- FILTER ROW -->\n  <div class=\"filter-row\">\n    <span class=\"filter-label\">Filter:<\/span>\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 class=\"shop-section\" data-category=\"courses\">\n    <div class=\"section-heading\">\n      Online Courses\n      <span class=\"section-count\">Coming soon<\/span>\n    <\/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\">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\">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\">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 class=\"shop-section\" data-category=\"guides\">\n    <div class=\"section-heading\">\n      Guides &amp; E-Books\n      <span class=\"section-count\">1 available<\/span>\n    <\/div>\n    <div class=\"product-grid\">\n\n      <a href=\"\/index.php\/?add-to-cart=36\" 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\">R 29<\/span>\n          <span class=\"product-btn\">Buy Now<\/span>\n        <\/div>\n      <\/a>\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\">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\">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 class=\"shop-section\" data-category=\"templates\">\n    <div class=\"section-heading\">\n      Templates\n      <span class=\"section-count\">Coming soon<\/span>\n    <\/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\">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\">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\">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 class=\"shop-section\" data-category=\"packages\">\n    <div class=\"section-heading\">\n      Consulting Packages\n      <span class=\"section-count\">3 available<\/span>\n    <\/div>\n    <div class=\"product-grid\">\n\n      <a href=\"\/index.php\/book-a-call\/\" 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\">R 18,500<\/span>\n          <span class=\"product-btn\">Get Started<\/span>\n        <\/div>\n      <\/a>\n\n      <a href=\"\/index.php\/book-a-call\/\" 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\">R 35,000<\/span>\n          <span class=\"product-btn\">Get Started<\/span>\n        <\/div>\n      <\/a>\n\n      <a href=\"\/index.php\/book-a-call\/\" 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 quote\">Price on request<\/span>\n          <span class=\"product-btn\">Enquire<\/span>\n        <\/div>\n      <\/a>\n\n    <\/div>\n  <\/div>\n\n  <!-- USD 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  <!-- SESSIONS -->\n  <div class=\"shop-section\">\n    <div class=\"section-heading\">Work With Me \u2014 1:1 Sessions<\/div>\n  <\/div>\n\n  <div class=\"sessions-strip\">\n\n    <a href=\"\/index.php\/book-a-call\/\" class=\"session-card\">\n      <div class=\"session-icon\">\u260e<\/div>\n      <div class=\"session-body\">\n        <div class=\"session-label\">Free \u00b7 30 min<\/div>\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-meta\">\n          <span class=\"session-price free\">Free<\/span>\n          <span class=\"session-btn outline\">Book Free Call<\/span>\n        <\/div>\n      <\/div>\n    <\/a>\n\n    <a href=\"\/index.php\/book-a-call\/\" class=\"session-card\">\n      <div class=\"session-icon\">\u26a1<\/div>\n      <div class=\"session-body\">\n        <div class=\"session-label\">Paid \u00b7 30 min<\/div>\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-meta\">\n          <span class=\"session-price\">R 150<\/span>\n          <span class=\"session-btn\">Book Session<\/span>\n        <\/div>\n      <\/div>\n    <\/a>\n\n  <\/div>\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    \/\/ Scroll reveal\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    \/\/ Category filter\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\n        const filter = btn.dataset.filter;\n        document.querySelectorAll('.shop-section').forEach(section => {\n          if (filter === 'all') {\n            section.style.display = '';\n          } else {\n            section.style.display = section.dataset.category === filter ? '' : 'none';\n          }\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>Shop \u2014 oCode360 oCode360 Home Services Shop Courses Workshops Tools Resources About 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. Filter: All Online Courses Guides &amp; E-Books Templates Consulting Packages Online Courses Coming soon Course [&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":17,"href":"https:\/\/ocode360.com\/index.php\/wp-json\/wp\/v2\/pages\/123\/revisions"}],"predecessor-version":[{"id":231,"href":"https:\/\/ocode360.com\/index.php\/wp-json\/wp\/v2\/pages\/123\/revisions\/231"}],"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}]}}