🌿 Root to Fruit — Master Project Hub

From first line of code
to career that changes a life.

Single source of truth for Yarashi's architecture, sprint plan, strategic vision, and every decision made in the build. Not just what we built — why we built it this way.

Updated 16 Jul 2026
Sprint 2 Active
Status Beta
Repo agilefoundry/agf-job-match
Session 10 hours today
🌿 Root to Fruit →
Sprints complete
2
Sprint 0 + 1
Active sprint
2
Foundation fixes
Planned sprints
12
Through market leadership
Bugs fixed today
18
Hydration, staging, deletion
Critical open
2
create-manual, hydration, fonts, delete
Platform
Live
yarashi.com.au
Today's session — 21 June 2026
● What we built and decided in 10 hours
LinkedIn content strategy4 posts drafted and refined: gym post, database architecture, Big Data is over, Chinese EV analogy. Posting cadence set: 24-48hr between posts.
Root to Fruit visionFull 5-layer platform architecture defined: Foundation, Intelligence Core, Journey Engine, AI Tools, Human Outcomes. Career companion vision formalised.
Intelligent data layerCanonical enrichment pipeline designed: 5-stage ingest-normalise-enrich-intelligence-deliver. Skill taxonomy, market salary tables, zero AI cost per job.
locationResolver.ts builtSingle canonical source of truth for all job API integrations. Country-first Jooble format (Country, State, City) prevents Sydney NS, Perth Scotland, Newcastle UK ambiguity.
Jooble US jobs bug fixed30 Jamestown ND jobs were entering job_feed. Root cause: pref.location was null, Jooble defaulted to US results. Fixed and deployed.
saved_jobs cleaned97 duplicate test entries removed via targeted SQL. Kept one record per unique title+company. Real saved jobs intact from 13 June onwards.
Project board restoredDocs deploy broke routing (Next.js pages in a static site). Reverted dd4da22, rebuilt as pure static HTML. Board back up within minutes.
Non-ASCII build failures fixedlocationResolver had em dashes and arrows in comments causing webpack syntax errors. Two failed builds. Stripped to pure ASCII. Lesson: always validate before shipping.
China strategy developedSea Turtle segment, government venture model, IP fork licence, personal safety exit structure, technology diplomacy framing. Full storyboard in Founder Log.
Full platform audit764KB page.jsx, 13,153 lines, 16 modules mapped. 4 critical bugs, 5 incomplete features, 6 vision gaps identified and prioritised.
Core documents
🌿
Root to Fruit — Vision & Roadmap
The complete product vision. Five-layer architecture from Foundation to Human Outcomes. Every sprint from 2 through 9. Career companion defined. The platform that walks alongside a person for life.
Vision21 Jun 2026
🧠
Intelligent Data Layer Architecture
The competitive moat. Five-stage enrichment pipeline. Enriched job_feed schema. Skill taxonomy (2,000+ skills). Market salary tables. pg_cron schedule. Zero AI cost per job. The database as intelligence, not storage.
Architecture21 Jun 2026
📖
Founder Session Log — 21 Jun 2026
The storyboard. Every strategic discussion captured verbatim: LinkedIn strategy, Big Data argument, Chinese EV analogy, China geopolitical strategy, IP fork model, personal safety decisions, guiding principles. The full 10-hour record.
Storyboard21 Jun 2026
🔍
Full Platform Audit — June 2026
Complete audit of page.jsx (764KB, 13,153 lines, 16 modules). All critical bugs, incomplete features, technical debt, and the 6 vision gaps that separate what Yarashi is from what it must become.
Audit21 Jun 2026
🚀
Beta Exit Criteria
22 criteria across 6 categories. localStorage persistence. Live progress tracking. The gate between beta and public launch. Sprint 2 must close the majority of these.
LiveActive
📋
Master Handover Document
Complete technical reference. All env vars, API keys, Supabase tables, RLS policies, cron jobs, deployment config, known issues, and safe copy baselines.
ReferenceActive
Risk Register
Active risk tracking across technical, business, security, and compliance categories. RAG status, mitigations, and owners for every identified risk.
ActiveActive
🏛
ISO Certification Pathway
ISO 27001, 9001, 42001 framework. R&D Tax Incentive qualification tracking. Dual-use: Australian compliance and Chinese government partnership credibility. Begins Sprint 8.
Sprint 8Planned
Sprint plan
SPRINT 0
Done
Security & Infrastructure Foundation
Stripe webhook verification, CRON_SECRET auth, CSP/security headers, Supabase 2FA, PII stripping across 6 AI routes, project board 2FA gate
SPRINT 1
Done
Legal Compliance & Quick Wins
Privacy Policy, ADM disclosure, LinkedIn data warrant in ToS, CV upload consent, UptimeRobot monitoring, platform_health table, extended job fields, 2-week scoring cutoff
SPRINT 2
Active
Fix the Foundation
4 critical bugs · 5 feature completions · locationResolver.ts deployed · Jooble US jobs fixed · saved_jobs deduped · project board docs added · platform audit complete
SPRINT 3
Planned
Destination Engine + Intelligent Data Layer
Career destination (user_destination table) · skill_taxonomy 2,000+ skills · enriched job_feed schema · normalisation pipeline (title, salary, location) · market intelligence tables · pg_cron schedule
SPRINT 4
Planned
Career Roadmap Module
AI-generated personalised roadmap · milestone tracking · career timeline (career_timeline table) · persistent narrative · roadmap API route · progress celebration · roadmap refresh on demand
SPRINT 5
Planned
Learning Navigator
Gap-to-course recommendations · certification pathways · free vs paid ranked by ROI · Australian training context (TAFE, VETASSESS, ACS) · skills progression tracking · learning_recommendations table
SPRINT 6
Planned
Proactive Intelligence Layer
user_alerts table · new job notifications · salary shift detection · trending skill alerts · CV staleness nudges · application follow-up reminders · career health score · My Hub daily brief · next best action
SPRINT 7
Planned
Career Companion AI Layer
Companion memory across all tools · context-enriched AI prompts (CV + destination + roadmap + market data) · cross-tool intelligence · career companion chat · progress-aware responses
SPRINT 8
Planned
Platform Maturity
page.jsx split into 14 module files + components + utils + constants · ISO 27001/9001/42001 documentation · R&D Tax Incentive tracking · performance audit · accessibility audit
SPRINT 9
Planned
Internationalisation & Australian Depth
Full UI translation audit across 8 languages · AI response language matching · RTL layout for Arabic · state-specific content (NSW/VIC/QLD/WA) · visa-aware guidance · TAFE/VETASSESS integration
Sprint 2 — active tasks
Critical bugs — fix before anything else
create-manual to build-cv silent failureCVTailorModule line 3392. Async chain between create-manual success and build-cv call swallowing error silently. Hydration fix is leading theory. Live test then targeted fix.
Critical
Hydration regression testcf55673 deployed but not fully regression-tested across all 16 modules. CV Maestro useEffect localStorage at line 2878 specifically needs verification.
Critical
Duplicate @import in GlobalStylesLine ~12494. Two @import statements in same style tag. Only first is honoured by browsers. Cormorant Garamond and Montserrat may be silently failing on My Hub.
High
Delete account APILine 9353 is a TODO stub showing a toast to contact support. Build /api/account/delete with 30-day grace period. Required under Australian Privacy Act.
High
Feature completions
CV Maestro update flowMake Refresh my Master CV path prominent on existing step. Clear path to re-upload LinkedIn PDF when profile changes.
Medium
CV Tailor two-step flowCurrently parallel tabs. Redesign as sequential: Feedback first, then user chooses Rewrite. Removes confusion between modes.
Medium
Pipeline UI polishCard density, status visibility, expiry date prominence, mobile layout. Kanban is functional but not polished.
Medium
Reports module decisionNav item points to MyHub. Decide: dedicated Reports component or merge permanently. Remove orphaned nav item either way.
Medium
Spanish end-to-end testTranslations exist at line 12289. Auto-detect and manual selector untested. Many modules still use hardcoded English strings instead of t. references.
Medium
Completed today in Sprint 2
locationResolver.ts deployedCanonical location library built. Country-first Jooble format (Country, State, City) across 57 locations. Prevents Sydney NS/FL, Perth Scotland, Newcastle UK, Adelaide SA ambiguity. buildAdzunaUrl, buildJoobleBody, isLocationConsistent exported. All API routes now import from single source.
Done
Jooble US jobs root cause fixed30 Jamestown ND jobs in job_feed. Root cause: pref.location was null, passed empty string to Jooble, returned US results. Fixed with explicit city resolver. Non-ASCII build failures (em dashes in comments) and orphaned closing brackets also fixed across 3 deploys.
Done
saved_jobs database cleaned100+ duplicate test entries removed. incrementinc role appearing 30+ times from create-manual silent failure bug testing. Test entries (ServiceNow PM, SN PM, Test, 1 IT Project Manager) removed. 97 clean real saved jobs retained.
Done
Project board routing fixedDocs deploy commit dd4da22 added Next.js app/ folders to a static HTML site, breaking Vercel routing and causing 404 on entire board. Reverted immediately. Docs rebuilt as pure static HTML files matching existing site structure.
Done
Strategic sessions — captured today
🌎
China Strategy — Technology Diplomacy
Yarashi identified as having no equivalent in China from the candidate perspective. All Chinese platforms (Boss Zhipin, Zhaopin, Liepin) serve employers, not individuals.
  • Primary segment: Sea Turtles (Chinese nationals returning from Australia with international CVs)
  • Entry model: IP fork licence — keep Yarashi brand and codebase in West, sell China a rebranded copy with geographic exclusivity
  • Community model: 70% of profits to boxing clubs and youth retraining
  • Safety structure: No executive role, no board position, no data access after transfer — eliminates espionage risk to family
  • Precedent value: First Western SaaS founder to cleanly sell to Chinese government sets terms for future transfers
  • Infrastructure: Alibaba Cloud + self-hosted Supabase + Qwen/ERNIE AI + Alipay + WeChat Pay
🚀
LinkedIn Thought Leadership — 4 Posts
Four posts developed, refined, and pressure-tested for accuracy today. Posting cadence: 24-48 hours apart.
  • Post 1 (Personal): Claude told me to go to the gym — Yarashi built with PM discipline: sprints, burndown, beta exit strategy
  • Post 2 (Technical): Legacy databases were never designed for AI — bolted-on vs AI-native architecture
  • Post 3 (Bold): The era of Big Data is over — it was a sticking plaster on a structural wound
  • Post 4 (Analogy): Chinese EV analogy — BYD clean-sheet vs European combustion platform. Applied to Oracle/Salesforce/ServiceNow. Closing word: "Catching up."
All Yarashi architectural details deliberately omitted for competitive reasons.
🧠
Intelligent Data Layer — The Real Moat
Every job board worldwide produces identical raw fields: title, company, description, location, salary, date, url. The moat is what happens to that data before the user sees it.
  • Stage 1 Ingest: Any source, source-agnostic normalisation contract
  • Stage 2 Normalise: Title lookup table, salary parser, location geocoder — zero AI
  • Stage 3 Enrich: Skill taxonomy extraction, seniority detection, industry classification — zero AI
  • Stage 4 Intelligence: trending_skills, market_salary, role_demand, company_intelligence — pg_cron, zero AI
  • Stage 5 Deliver: Pre-computed, sub-100ms, proactive — user never waits
AI fires only for narrative generation. Output stored permanently. Never repeated for same user + context.
🗺
Career Companion Vision — Root to Fruit
Kevin's founding statement: "It must NOT be static. It must take people into a career, on a career journey and recommend them valuable things like training programmes, courses, skills which will make them stand out, put them in the right direction from school to career."
  • Destination Engine: Where do you want to be in 12 months? Sets north star for everything
  • Career Roadmap: AI-generated personalised path from today to destination. Persists and evolves
  • Learning Navigator: Gap identified + course recommended, ranked by ROI, Australian context
  • Career Timeline: Every action, application, skill, milestone recorded chronologically
  • Proactive Intelligence: Platform pushes insights before user asks — never static
Not a job board. Not a CV tool. A career companion for life.
System architecture
Five-layer career intelligence system Full vision →
🌿
Foundation
Auth, DB, RLS, Security, ISO, Billing, Monitoring
🧠
Intelligence core
Destination engine, Market intel, Profile intel
🗺
Journey engine
Roadmap, Learning Navigator, Timeline, Alerts
AI tools
CV Maestro, CV Tailor, Skill Radar, Interview, LinkedIn
🍋
Human outcomes
Migrants placed, Careers built, Communities stronger
Data enrichment pipeline — zero AI cost per job Full architecture →
📥
Ingest
Adzuna, Jooble, Seek, Indeed — same raw fields everywhere
🔧
Normalise
Title, salary, location via lookup tables. Pure logic, no AI.
Enrich
Skills extracted, seniority detected, industry classified
💡
Intelligence
CV match (SQL), alerts (pg_cron), health score — zero AI
🚀
Deliver
Pre-computed, instant, proactive. User never waits.
Location resolver — canonical source of truth Technical ref →
📍
resolveLocation()
Converts any user input to fully qualified config
🏭
buildAdzunaUrl()
Correct country endpoint + where param
🌐
buildJoobleBody()
Country, State, City format — prevents Sydney FL, Perth Scotland
isLocationConsistent()
Post-fetch filter catches anything that slipped through
📄
57 locations
AU, UK, IE, US, CA, NZ, SG, UAE — all fully qualified
New database tables — Sprint 3 onwards
skill_taxonomy
2,000+ skills with aliases, categories, related skills, industry relevance, seniority signals, and rolling 7/30/90 day demand counts. The dictionary every platform feature reads from. Built once, grows forever.
Sprint 3 · Core
trending_skills
Skill demand aggregated from job_feed over 7/30/90 day windows. Trend direction (rising/stable/declining), average salary for roles requiring this skill, top industries and locations. Refreshed every 4 hours by pg_cron. Zero AI.
Sprint 3 · pg_cron
market_salary
P25/P50/P75/P90 salary bands by role family, seniority level, location region, and industry. Computed directly from real job_feed data. No surveys, no third-party data. Recalculated every 4 hours.
Sprint 3 · pg_cron
user_destination
Target role, industry, salary range, timeline (6/12/36 months), and career stage (school-leaver, graduate, early, mid, senior, career-changer, returner). The north star that drives all personalisation.
Sprint 3 · New
career_roadmap
AI-generated personalised milestone path from today to destination. Stored and versioned, not regenerated every visit. User marks milestones complete. Platform celebrates progress.
Sprint 4 · New
career_timeline
Chronological record of every significant career event: CV uploaded, job applied, skill added, course completed, interview prepped, milestone hit. The persistent narrative of each user's journey.
Sprint 4 · New
user_alerts
Proactive notifications: new matched jobs, salary shifts, trending skills missing from CV, CV staleness after 60 days, application follow-up nudges after 14 days. Generated by pg_cron. Zero AI cost.
Sprint 6 · pg_cron
career_health
Composite 0-100 score: CV freshness (0-25), market alignment (0-25), application activity (0-25), skill growth (0-25). Pure SQL calculation from existing data. Recalculated daily.
Sprint 6 · pg_cron
Guiding principles — every decision runs through these
01
Serve the person, not the metricEvery feature must genuinely help the user. If it doesn't serve the person, it doesn't ship.
02
Proactive over reactiveYarashi tells you what you need before you ask. The platform works while the user sleeps.
03
Honest over flatteringTell users where they actually stand. Soft lies waste their time. Yarashi is a trusted advisor, not a cheerleader.
04
Persistent over transactionalEvery interaction builds the journey. Nothing is a one-off. The platform accumulates meaning.
05
Simple over impressiveIf a user needs to read instructions, the feature has failed.
06
Inclusive by defaultSchool-leavers, migrants, career-changers, returners — all first-class citizens, always.
07
Built to lastISO certified. Documented. Auditable. Worthy of the trust people place in it.
08
The database is intelligenceNot storage. Every row enriched before the user sees it. The data layer is the product.
09
AI used sparingly, stored permanentlyAI fires only where lookup tables cannot. Every output cached. Never repeated for same context.
10
Generosity as strategy70% back to the people — boxing clubs, retraining, community. Whether in Sydney, Ireland, Spain, or China.
"Our purpose is to serve the people. Help people. From root to fruit." — Kevin Delaney, Founder, Yarashi · 21 June 2026
Document cross-references
From
Connects to
Document
Vision & Roadmap
Sprint 2-9 task breakdown
Platform Audit
Sprint 2 critical bugs and priorities
Data Architecture
Sprint 3 database build tasks
Data Architecture
Sprint 6 proactive alert system
Founder Session Log
All strategic decisions and analogies
Beta Exit Criteria
Sprint 2 completion gate — 22 criteria
Risk Register
All sprints — risk tracking
Handover Document
Technical reference for all sprints
ISO Pathway
Sprint 8 certification documentation
locationResolver.ts
lib/locationResolver.ts in agf-job-match repo
Session close — 12 Jul 2026 (split night)
ARCHITECTURE CHANGE 12 Jul 2026: app/platform/page.jsx reduced 780,660B → 112,290B (2,082-line shell). New modules: app/utils/{colors,fetch,plan,exports}.js + app/components/ui/{Toast,Logo,Shared,InfoBtn,CVUpload,PricingModal}.jsx + 14 feature modules in app/components/. Named exports throughout. SupportBot + ErrorBoundary remain in shell.
Session close 2 — 12 Jul 2026 (upgrade day)
STACK CHANGE 12 Jul 2026: Next.js 16.2.10 LTS (Turbopack default bundler), React 19.2.7. middleware.ts renamed proxy.ts per Next 16. lib/stripe.ts now lazy-inits the Stripe client (proxy pattern, call sites unchanged). Stripe UI packages: react-stripe-js@6.7.0 + stripe-js@9.9.0. Node 20+ required (dev on 26).