Changelog
This page documents all notable changes to IndepAI. Subscribe to our changelog feed for updates.
v1.21.7 (2026-07-03)
Section titled “v1.21.7 (2026-07-03)”Features
Section titled “Features”- data-enrichment: fix tax-verify coverage gap + prod replicate path (#852) (#875) (
29e4b39)
Performance
Section titled “Performance”- build: fold cn() shim into ui-utils chunk to shorten hero LCP waterfall (#876) (
db791cb)
v1.21.6 (2026-07-03)
Section titled “v1.21.6 (2026-07-03)”Performance
Section titled “Performance”- eliminate eager locale-en.js load from hero-island critical path (round 5) (#872) (
5944314)
v1.21.5 (2026-07-03)
Section titled “v1.21.5 (2026-07-03)”Features
Section titled “Features”- data-enrichment: monthly FX/CPI reindexation step (#868) (
f1e790e) - enrichment: Exa-grounded tax verification + cost-anchor row-block gate (#867) (
6ecf8b2)
Bug Fixes
Section titled “Bug Fixes”- enrichment: honest job status + parent job finalization (#865) (
6aef749)
Performance
Section titled “Performance”- fix LCP regressions — AW gtag double-load, font-display/swap, latin-ext over-fetch (#870) (
f4770f7)
v1.21.4 (2026-07-03)
Section titled “v1.21.4 (2026-07-03)”Bug Fixes
Section titled “Bug Fixes”- a11y: agentic-browsing accessibility-tree failures on public nav/hero (#863) (
e3cc792)
v1.21.3 (2026-07-03)
Section titled “v1.21.3 (2026-07-03)”Features
Section titled “Features”- trust: surface Pro trial and tool data-source disclosure (#854) (
39b2645)
Bug Fixes
Section titled “Bug Fixes”- pricing: correct meta description price ($4.99 → $9.99) (#857) (
62425c2) - enrichment: correct inverted Sofia/Bucharest cost anchors (#853) (
448e8d7)
Performance
Section titled “Performance”- public: LCP round 3 — defer GTM/Ads, direct CookieYes, hero client:idle (#860) (
d258c99)
v1.21.2 (2026-07-03)
Section titled “v1.21.2 (2026-07-03)”Features
Section titled “Features”- seo: link Facebook page — footer + Organization sameAs (
b8945c1)
Performance
Section titled “Performance”- coming-soon: mobile LCP/JS round-2 — root rewrite, per-arm hero islands, self-hosted fonts, lazy Sentry (#856) (
13e67a7)
v1.21.1 (2026-07-03)
Section titled “v1.21.1 (2026-07-03)”Features
Section titled “Features”- seo: on-page SEO for /coming-soon — title/meta trims, methodology + FAQ, real 404s (#844) (
2ef2ba0) - marketing: Marketing Autopilot v2 data layer + admin panel (#834) (
f084f89)
Bug Fixes
Section titled “Bug Fixes”- i18n: emailCapture namespace excluded from EN client bundle (raw key leak) (#846) (
6f6b7b0) - google-ads: generate_refresh_token persists token to local env file (
ff53f51) - marketing: daily loop now ACTS — execute-approved + non-money whitelist; cron git-lfs PATH fix (
dbd7f7d) - portfolio: chart colors via canvas pixel readback — fillStyle getter keeps oklch (#831) (
af19411)
Performance
Section titled “Performance”- seo: cut public font payload — Material Symbols icon_names subset, async Inter, dedupe (#847) (
f48a91a)
Chores
Section titled “Chores”- marketing: finish ads-strategy docs relocation root -> marketing/ (
c03e5da) - marketing: runbook — own awesome-digital-nomads list live under cloudfloo org (
8da7eb0) - marketing: runbook sync after live submission run — 2 submitted, 4 blockers documented (
0c3afbf) - marketing: two ready-to-upload sponsored articles for WhitePress/Linkhouse order (
5060977) - marketing: submission runbook — founder batches, ready-article pointers, HARO kit (
3184efa) - marketing: autopilot daily brief 2026-07-03 (
3240dab) - marketing: seo submission collateral — sponsored order brief + directory kit (
a5d6b74) - marketing: ops hardening — PLN currency gotcha, worktree cron, budget-cap script, docs changelog v1.21.0 (
8891de5)
v1.21.0 (2026-07-02)
Section titled “v1.21.0 (2026-07-02)”Features
Section titled “Features”- portfolio: IA 6→4 tabs, Brand System v3, holdings-row integrity fixes (#824) (
c5f815d) - portfolio: interactive stock charts, sparklines, unrealized P/L, price freshness (#817) (
2790204) - portfolio: price-history OHLCV pipeline + /portfolios/price-history endpoint (#814) (
0b6aec3) - brand: BrandPhotoCard bento — travel photos on dashboard + city page, design guide v3 asset docs (#808) (
46527cd) - fi-score: total redesign — tabbed IA, FI education layer, Brand v3 (#807) (
c56e36f) - rewards: Brand v3 redesign of Rewards page (badges + invite) (#806) (
0ab77ec) - skills: rebuild nav skills, add 11 new skills (#804) (
b81a139) - cities: filters/sort UX redesign + PL/EN copy de-slop (#801) (
d1b7529)
Bug Fixes
Section titled “Bug Fixes”- portfolio: honest indicator cards — per-axis risk copy, no fabricated zeros (#828) (
5db31b9) - portfolio: definitive no-dividend state on the overview dividend card (#827) (
455d697) - portfolio: render chart with oklch tokens + 5 adversarial-review fixes (#826) (
b50ef16) - portfolio: freedom-card ring overflow + junk comparison city (eligibility floor) (#825) (
c3f4c9a) - portfolio: real instrument names via sync enrichment; definitive dividend status (#822) (
d475ce0) - portfolio: nightly snapshot cron writes daily rows, not ISO-week-start (#820) (
a47473c) - portfolio: rental income save 400 — client/schema field-name drift (#819) (
b21494f) - portfolio: single-source snapshot writer, retire dead price cron, fix island hydration (#816) (
0dc3200) - portfolio: six P1 UX bugs on the portfolio tab (#815) (
869daa6) - cities: eligibility floor + diverse tiebreaks for FI ranking (#796) (
9f7e391) - ci: sync supabase types hash + make PROD type-regen maintain it (#795) (
339f8ca) - dashboard: gate shell until client hydration (
df4610a) - dashboard: prevent hydration mismatches (
9f5ce26) - csp: allow Google Ads conversion endpoints (
dcadc08) - auth: stabilize mobile dashboard hydration (
425dbb6) - launch: clean production console errors (
d81c1f3) - sentry: harden launch error paths (
f229296) - ci: use IPv4-compatible Supabase link in migrations (
9019d00) - k8s: add production www ingress host (#788) (
cfe5750)
Documentation
Section titled “Documentation”- marketing: backlink program 2026 playbook + backlink_pipeline seed (#830) (
646b586) - dev: index the portfolio overhaul program (2026-07-02) (#829) (
3fc634d) - dev: index cities explorer overhaul (2026-07-02) (#802) (
7df7a93)
Chores
Section titled “Chores”- marketing: daily ops brief 2026-07-02 (autopilot v2 first run) (
56b1b67) - marketing: Marketing Autopilot v2 — approved spec, daily-ops skill, cron wrapper (
5505dbc) - skills: add codex-marketing-images skill for marketing asset generation (
d1b3622) - skills: fix 15 audited skills + prune legacy rules and dead symlinks (#803) (
546764f) - agents: orchestration workflow + deep-reasoner/fast-executor agent definitions (#805) (
8034564) - deploy: bump production indep-ai to prod-b2224152 (ads conversion tag + scripts) (
145732f) - deploy: bump production indep-ai to prod-f3d838a5 (hero A/B override fix + redesign) (
997bb21) - k8s: bump indep-ai image to b325647d (CSP: Umami/GA4/DoubleClick) (
74e03d1) - deploy: bump PROD to 7b76c4e9 (
0ef3ff1)
Other Changes
Section titled “Other Changes”- deploy(prod): bump to prod-de6cd3ad (CSP + NetworkPolicy fix) (
6ebc5d3)
v1.20.1 (2026-07-01)
Section titled “v1.20.1 (2026-07-01)”Features
Section titled “Features”- feature-flags,e2e: quiet flag defaults-mode + @smoke-tagged public smoke (#786) (
42ee987) - harden email delivery and document nomad community (#761) (
5f6b3a4) - ads: wire Google Ads conversion (AW-1045148393) + campaign mgmt scripts (
b222415) - hero variants polish, AI FI snapshot, i18n, E2E fixes (#734) (
b08a30d) - compliance,security,auth,ai,billing: war-room batch — 100+ file sweep (
49f0410) - compliance,perf: GDPR Art.52 AI labels, security headers, LCP fixes (
30a9ec0) - auth: Apple OAuth button + i18n review checklist (#571, #536) (
221254d) - planner: tax-residency day accumulator + 31-country threshold dataset (#685) (
ea77f16) - ci: bundle-size gate + Lighthouse perf CI job (#547) (
17d9a5c) - geo-arbitrage: Net-FIRE sort option + years-gained city detail (#683/#684) (
3d42882) - gdpr,data-enrichment: Art.17 account deletion + GeoNames coord fallback + trim orphan LLM fields (#652, #687 AC1, #680) (
9b160ca) - cities: cost-history API + retention migration + i18n (#678) (
e5cda64) - security,infra: DPIA for AI financial profiling + ServiceMonitor bearer token auth (#561, #525) (
a5d3d34) - export,compliance: CSV export endpoint + ROPA document (#556, #531) (
de9812b) - tools: currency risk calculator for nomad FIRE planning (#695) (
b80a75b) - tools: after-tax withdrawal simulator with country-specific tax models (#694) (
8070c12) - admin,ai: PostHog AI observability + Pro comp grant UI (#491, #585) (
c57415b) - admin: user-ops support actions + GDPR erasure/export (#586, #589) (
a03a363) - admin,waitlist: cache stats perf card + waitlist count social proof (#583, #575) (
112c6fa) - seo: localize OG metadata for all 11 tool pages EN+PL (#710) (
53fd6c6) - monitoring,ui: Sentry metrics + coming-soon hero a11y fixes (
14cfff2) - waitlist,security: share block on /coming-soon + GDPR cron health check (#711, #528) (
5440e4c) - cities,observability: smart filter badge + Sentry fail-loud (#533, #526) (
1b43eb7) - cities: local feedback moderation + city sentiment display (#714, #715) (
4b667ad) - cities: POST /api/v1/cities/[id]/local-feedback submission endpoint (#713, #716) (
d58252e) - pwa,marketing: SW registration on app load + UTM share-link kit (#570, #709) (
63821a6)
Bug Fixes
Section titled “Bug Fixes”- launch: repair waitlist funnel telemetry (
38d3d2b) - ci: unbreak develop — migration collision + email snapshots + data-export test (+ email-capture sources) (#785) (
c3c518c) - csp: allow Supabase-hosted media so coming-soon demo video plays (#782) (
1624a93) - analytics: gate Ads conversion on internal traffic + restore Umami under enforce-mode CSP (#759) (
2ad8e00) - e2e: TS2551 PostgrestFilterBuilder.catch in portfolio-consistency afterAll (
f2587c8) - e2e: portfolio-consistency — stale selector + category teardown (
0ffef0b) - portfolio: per-portfolio totalValue NaN→null (wrong asset columns) + multi-portfolio E2E (Batch 6i) (#756) (
c11234c) - referral: /r/[code] attribution cookie never set — 100% referral loss (+ E2E, Batch 6f) (#750) (
0aa6881) - api: api-keys revoke → 404 for unknown id (+ settings P1 E2E, Batch 6d) (#747) (
9eb4316) - api: malformed JSON body → 400 not 500 (+ public FI endpoints E2E, Batch 6c) (#746) (
a7af1bb) - coming-soon: clear stale PostHog flag override so hero A/B buckets (
f3d838a) - gdpr,e2e: repair GDPR data export + green Batch-5 P0 specs vs staging (#742) (
25431b2) - csp: allow Umami, GA4 region1, DoubleClick endpoints (
b325647) - k8s: remove podSelector from frontend NetworkPolicy ingress rule (
de6cd3a) - k8s,security: correct NetworkPolicy ingress namespace + CSP cookieyes domain (
e2be9e6) - security: add cdn-cookieyes.com to CSP script-src and connect-src (
f2bef77) - build: sentry DSN throw→warn to unblock Docker prerendering (
7b76c4e) - build: sync docs/package-lock.json for Docker npm ci (
a43f3ec) - build: sync package-lock.json + remove –prefer-offline from Dockerfile (
6e8119d) - infra: reconcile STG/PRD Supabase drift — crons, indexes, ticker fn (#512, #572) (
ef52ebb) - health: decouple Redis from readiness gate — fail-open on Redis loss (#636) (
6319aae) - infra,enrichment: HPA maxReplicas cap + CPU target + LLM prompt caching + spend guard (#635, #634, #682) (
7e2c36c) - analytics,e2e: strip internal UTMs from /vs+/alternatives + E2E route fixes (#623) (
f7aa88f) - billing,analytics: Pro legacyPriceIds pre-reprice guard + GA4 event rename (#542, #720) (
069d632) - security,gdpr,admin: GDPR consent signal + MRR cron (#705, #706) (
1f12b1c) - security: harden public calculator-results + GDPR consent signal + MRR cron (#707, #705, #706) (
1817026) - admin: geo_arbitrage source filter 400, silent flag errors, debounce, column header, conversion rate (#594, #596) (
7c1a35e) - security,i18n,analytics: onboarding allow-list, hero i18n, confirmation events (#702, #703, #704) (
0c4572d)
Refactoring
Section titled “Refactoring”- e2e: programmatic sign-in — kill the UI-login flake, ~5-8x faster authed setup (#755) (
40e18f2) - admin: shared AdminPageHeader primitive applied to 9 tabs (#597) (
d0b862d)
- e2e: P2 coverage — legal pages + SEO endpoints (Batch 7) (#760) (
334e63d) - e2e: P1 coverage — admin users/alpha/broadcast + email-unsubscribe HMAC endpoint (#758) (
fd20e16) - e2e: unblock + cover Nomad leg-shorten undo (signed-token round-trip) (Batch 6i) (#757) (
af5a94d) - e2e: admin metrics API authz + shape; harden UI sign-in retries (Batch 6h) (#754) (
3ebaa81) - e2e: AI agent action execute → undo reversibility (Batch 6h) (#753) (
757cd5f) - e2e: AI Coach conversation history round-trip + owner isolation (Batch 6h) (#752) (
d55f916) - e2e: onboarding resumes at saved step after reload (Batch 6g) (#751) (
846489f) - e2e: i18n raw-key leak guard across EN+PL (Batch 6e) (#748) (
a74ad68) - e2e: AI Coach P1 — server-enforced consent + free-tier usage cap (Batch 6b) (#745) (
70afc2c) - e2e: cities P1 coverage — save round-trip + compare flow (Batch 6a) (#743) (
9063814) - e2e: Batch 2 — fix stale routes and heading (import-myfund, badges) (
ef6c943) - e2e: Batch 1+2 — remove 5 dead specs, fix Free+Pro/USD pricing assertions (
270e533) - e2e: pricing → checkout → webhook → plan-unlock smoke spec (#549) (
757dc36) - e2e: import → dashboard → FI-Score smoke spec (#550) (
91ebca9) - e2e: signup → confirm → welcome journey spec (#567) (
c6d3aa6) - e2e: product tour + AI FI Snapshot coverage; fix broker-sync flag (#552, #537, #546) (
b599d19)
Documentation
Section titled “Documentation”- design: Nomad Community UX/UI design package (#783) (
9baed83) - add waitlist interview recruitment template (#744) (
0ff109c) - analytics: correct coming-soon bypass list — homepage / is now gated (#741) (
87abf8e) - launch: war room 2026-06-30 + fix(seo) stale city count (#737) (
c30777f) - legal: subprocessor DPA register (#532) (#735) (
9c21a6a)
Chores
Section titled “Chores”- deps-dev: bump brace-expansion from 1.1.12 to 1.1.15 in the npm_and_yarn group across 1 directory (#787) (
ac67ac6) - deploy: bump staging indep-ai to staging-b2224152 (ads conversion tag + scripts) (
c397068) - deploy: bump staging indep-ai to staging-f3d838a5 (hero A/B override fix) (
584e0de) - k8s: bump indep-ai image to b325647d (CSP: Umami/GA4/DoubleClick) (
739d566) - deploy: bump STG+PROD to 7b76c4e9 (
bf7ab76) - stage csp test updates + backlog grooming doc + video frame doc (
6a6af6f) - audit: add 8 missing routes to mobile overflow harness (#527) (
dffc1cb) - billing: wire live Stripe products and prices for prod deploy (
b897276) - docker: preserve Sentry build-args from main (PUBLIC_SENTRY_DSN, SENTRY_AUTH_TOKEN) (
456f58d) - deploy: pin prod overlay to live prod-028a926 before release merge (
915c0a4)
Other Changes
Section titled “Other Changes”- deploy: bump images to de6cd3ad (CSP fix + NetworkPolicy fix) (
c5cec34)
v1.20.0 (2026-06-29)
Section titled “v1.20.0 (2026-06-29)”Features
Section titled “Features”- marketing: coming-soon hero A/B experiment, UTM routing, video skills, and ads research (
bb885b0) - data-enrichment: tax multi-model ensemble with abstention + source provenance (#689) (#698) (
bb6ef40) - data-enrichment: field provenance + source-priority reconciliation (#691) (#699) (
e792246) - data-enrichment: expand DN visa coverage + source URLs + staleness SLA (#679) (#700) (
7be87cf) - admin: Enrichment Health tab + confidence/freshness surfacing (#690, #686) (#701) (
45a168d) - data-enrichment: Net-FIRE true-cost index folding tax+visa (#683) (#697) (
b5ecc96) - data-enrichment: ground cost-of-living in World Bank PPP + stable cost index (#684) (#693) (
407780d) - data-enrichment: self-heal remaining importer HTTP calls (#686) (
27e8e4e) - data-enrichment: LLM spend guard with budget ceiling (#682) (
eadc460) - data-enrichment: absolute cost-plausibility bounds in validation (#684) (
beec0bf) - db: auto-stamp updated_at on visa & tax tables for staleness SLA (#679, #689) (
6fba8d3) - data-enrichment: persist numeric per-field confidence to DB (#690) (
c095d31) - db: auto-stamp numbeo_data.updated_at as a freshness signal (#686, #690) (
6c737d3) - data-enrichment: env-configurable spot-check tolerances (#688) (
2294992) - expose questionnaire fields to get_nomad_settings AI tool (
8aa96a3) - data-enrichment: per-region spot-check gate, not just global avg (#688) (
a073f88) - wire food/nature/nightlife/wellness/family interests and travel_style into city scoring (
5e41793) - fetch food_scene/nature_access/nightlife/fitness_culture in CityCard query (
5e4c55a) - data-enrichment: make spot-check a blocking quality gate (#688) (
c505aba) - add LifestyleScores interface and lifestyle field to CityCard (
ec4c83a) - data-enrichment: webhook failure alerting on pipeline run (#686) (
4b235d0) - data-enrichment: self-healing fetchWithRetry for importer HTTP (#686) (
44dc5b3) - data-enrichment: fail loud on severe silent partial failures (#686) (
eafdf2c) - admin: broadcast improvements + admin user mgmt tweaks (
82209d0)
Bug Fixes
Section titled “Bug Fixes”- analytics: failure-side funnel events for blog newsletter capture (#712) (
7c403a3) - analytics: exclude internal users from GA4 generate_lead Key Event (#692) (
fd3ea57) - analytics: complete founder internal-email allowlist (#676) (
2174dfa) - data-enrichment: prototype-safe pricing lookup in budget guard (#682) (
c6eea4e) - data-enrichment: harden LLM budget guard (security review on eadc460b) (
ea33c7f) - planner: prevent Dialog/Drawer close when clicking Select options (
870b4e8) - correct remoteWork.workStatus field name and export extractQuestionnaire for testing (
768d738) - data-enrichment: stabilize C1 value-for-money normalization (#683) (
4442898) - correct budget threshold (1200/2500 band) and add missing negative tests (
2c5f07b) - data-enrichment: snapshot costs after enrich, not before (#678) (
e2499a5) - data-enrichment: raise daily enrichment deadline 1h->2h (
e9388d2) - data-enrichment: don’t fail import:coordinates on geocoding misses (
aa78530) - data-enrichment: make /app/data writable by non-root runtime user (
f1c8712) - data-enrichment: write data/ under service root, not monorepo root (
1307d96)
Refactoring
Section titled “Refactoring”- test: use makeRow helper in lifestyle mapping tests (
b839672)
Documentation
Section titled “Documentation”- launch: War Room plan 2026-06-29 (#708) (
b4a7bed) - enrichment: record gaps resolved since research (epic #677) (
372e661) - enrichment: append improvement roadmap table (epic #677, 14 issues) (
181af9f) - enrichment: add data-enrichment service design doc + diagrams (
12ed9bb)
Chores
Section titled “Chores”- deploy: update staging indep-ai image to staging-eafdf2c (
9a61688) - deploy: update staging data-enrichment to staging-aa78530 (
e28a728) - deploy: update staging data-enrichment image to staging-f1c8712 (
4035bc8) - deploy: update staging data-enrichment image to staging-1307d96 (
d944cfe)
v1.19.0 (2026-06-28)
Section titled “v1.19.0 (2026-06-28)”Features
Section titled “Features”- admin: save + reload named user-segment filters (#592 part 1) (#673) (
77337ad) - coming-soon: 4-variant hero A/B/C/D experiment (Brand System v3 + PostHog) (#672) (
f3c517d) - admin: grouped left sidebar nav (flat tab scroller → 5 sections) (#670) (
f29541b) - waitlist: city-FI-bound waitlist CTA + view event on city pages (#667) (
f7cc6ef) - admin: unified Moderation Inbox tab (city feedback + AI-flagged stub) (#665) (
ecaa180) - admin: read-only “View as user” support snapshot (#661) (
009fb56) - admin: global Cmd/Ctrl-K command palette (search + navigate) (#660) (
2f9fc37) - admin: FI-Score recalculation UI (withAdmin wrapper) (#659) (
009eb0c) - admin: destructive-action confirm dialogs + per-tab error isolation & tab a11y (#598 pt 1-2) (#658) (
ab54275) - admin: System Health rollup tab (cron/cache/AI-budget/errors) (#657) (
9eff9a8) - portfolio: one-time manual→import “Other bucket” explainer (#653) (
7aebb1f) - observability: capture cron explicit-500 operational failures to Sentry (#651) (
4ab72d2) - onboarding: replay/restart entry point for the product tour (#649) (
eddb63f) - fi-score: FI-date sensitivity + currency-exposure helpers (#645) (
3b6eff0) - planner: EU EES-awareness warning on Schengen visa validation (#644) (
072451e) - public: privacy-safe shareable FI-by-city result cards (#643) (
82e6df6) - planner: preference deal-breakers, soft weights + AI summary (#642) (
97b3f44) - ai: AI Coach next-base city recommendations grounded in planner (#639) (
5781f5b) - planner: remote-work & time-zone-overlap constraints (#638) (
1af74fa) - planner: stay-duration presets + long-stay recommendation mode (#637) (
8bc97d4) - planner: compliance-light risk indicators (#632) (
136f217) - planner: Next Base Planner ranked shortlist (#629) (
8e9a467) - feedback: beta feedback loop after preview + planner (#627) (
89c82c7) - public: FI-by-city preview flow for beta acquisition (#626) (
e4a3e82) - admin: dedicated Revenue analytics tab (MRR movement, ARPU, churn, cohorts) (#624) (
987f8d2) - brand: Brand System v3 for logged-in surfaces (#625) (
7584f23) - admin: triage endpoint for risky FI-Snapshot feedback (#620) (
7179e8d) - monitoring: instrument AI Coach + FI-Score preview latency for <2s budgets (#618) (
e0e7e39) - nomad: surface visa-rule freshness + report-inaccurate flow (#617) (
ea5cf9d) - legal: add standalone /disclaimer page + footer & AI Coach links (#616) (
4e4ed19) - billing: env-resolve Stripe price IDs for test-mode staging checkout (#612) (
a2ab7ad) - security: add Content-Security-Policy header (#609) (
1fc4f58) - admin: add UTM channel acquisition breakdown to analytics (#607) (
75326f5) - waitlist: server-side UTM fallback from landing URL / Referer on capture (#606) (
e5d4b20) - i18n: enforce all 7 locales in CI gate via baseline ratchet (#605) (
e23dee0) - planner: add visa-accuracy legal disclaimer to planner visa surfaces (#602) (
44c7196) - waitlist: add InlineEmailCapture CTA to /tools/geo-arbitrage (#580) (
f34c903) - coming-soon: surface tools + /vs comparisons in pre-launch footer (
637643e) - ops: AI-cron fleet — 7 launch-ops agents (Claude cron + Codex automations) (#509) (
84660d8) - ai: launch FI snapshot wave one (#508) (
86e1fa6)
Bug Fixes
Section titled “Bug Fixes”- seo: strengthen city Dataset JSON-LD (#671) (
48d9eee) - waitlist: hide city CTA shell for logged-in + gate heading on reachability (#669) (
34db232) - admin: mobile-reachable table columns + sticky header + dropdown actions (#598 pt3) (#666) (
95ee306) - admin: server-side subscription-status filter with correct counts (#655) (
cf5fbda) - planner: surface the onboarding climate/interests step (#652) (
f94ec5a) - portfolio: stack asset-form field grids on mobile (#650) (
4e757c3) - a11y: accessible names + selected state for portfolio color swatches (#648) (
3d855f2) - notifications: remove nested-button hydration warning in InsightPanel (#647) (
0a33436) - ai: USD-normalize AI Coach recommendation financials + register tool in catalog (#640) (
fa71279) - infra: right-size staging memory request + validated load-test findings (#633) (
d3d5237) - security: OWASP hardening — share tokens, headers, search validation, referral RLS (#631) (
0d539d0) - waitlist: capture comparison traffic in context (#601) (
22973a9) - analytics: flag internal/staff signups in 4 remaining email captures (#610) (
19f3b6e) - admin: unwrap {success,data} envelope in batch-enrich API helpers (#619) (
db58972) - billing: block legacy Starter/Premium tiers at the checkout API (#615) (
29b39db) - flags: set portfolio-tracker seed hiddenBehavior to ‘hidden’ (go-live SSOT) (#613) (
edc265b) - i18n: translate the AHA first-value hero for de/es/fr/nl/pt (#608) (
3472797) - i18n: translate landing trustProof + 3 keys for de/es/fr/nl/pt (#604) (
71a507e) - i18n: fall back to English for missing keys instead of leaking raw keys (#603) (
69c2fa0) - analytics: flag internal/staff waitlist signups as is_internal (funnel pollution) (#578) (
327d118) - seo: reconcile marketing city counts (#511) (
fbdc075) - marketing: restore GDPR/RODO privacy marker in proof strip (P0-6) (
a0d8d54) - ci: type city page inline scripts (
1240ea9)
Performance
Section titled “Performance”- load: prod traffic-spike readiness + load-test suite (#630) (
f4c9796) - test: move component tests from jsdom to happy-dom (
465856b) - dev: scope pre-commit hook to staged changes + drop full build (
233861e)
- api: product-tour GET/PATCH + checklist-state preservation (#646) (
2bc43c3) - fi-score: pin preview==post-save FI-Score + net-worth contract (#611) (
36329f9)
Documentation
Section titled “Documentation”- launch: war-room plan 2026-06-28 (#664) (
af7e2ba) - design: add IndepAI design-system project + settings/dev notes (#668) (
b9cf35b) - legal: refresh privacy & cookie policy (GDPR) + data map (#641) (
02f863b) - mvp-scope: reconcile deferred-feature table with live flag SSOT (#654) (
fa40991) - analytics: document inline UTM first-touch primer (stops recurring #524 false positives) (#628) (
5ab0cd9) - marketing: reconcile North Star to waitlist-stats; dedupe drip twin (#614) (
a18fe80) - launch: require csv-import flag in GA go-live runbook (#582) (
f0547fe) - launch: war-room plan 2026-06-27 + 3 conversion-CTA issues (#576) (
ccf229b)
Chores
Section titled “Chores”- i18n: translate Help Center (help.json) for de/es/fr/nl/pt (#622) (
b446e77) - i18n: backfill aiFiSnapshot dashboard keys for de/es/fr/nl/pt (#621) (
0d39b6a) - ops: Codex jobs open ready-for-review PRs, not drafts (#577) (
a31be9b) - ops: schedule Codex cx1/cx2/cx3 via cron (#513) (
c15b3b2) - execute founder launch and improve launch vitals (#496) (
0667c4d) - publish launch audit and security updates (#495) (
fd0c915)
Other Changes
Section titled “Other Changes”- Docs/founder launch p1 execution (#510) (
fd9838f)
v1.18.0 (2026-06-25)
Section titled “v1.18.0 (2026-06-25)”Features
Section titled “Features”- marketing: add coming-soon premium bg experiment (#490) (
0b07635) - fi-score: brand-atmosphere redesign of the ScoreHero (#483) (
4f70acc) - dashboard: premium brand redesign of the first-run ActivationHero (#482) (
2d227d6) - dashboard: premium AhaHero redesign + sentinel-timeline fix (#481) (
8af4f26) - ai-coach: add get_portfolio_income tool (passive income / FIRE coverage) (#477) (
36c674c) - ai-coach: enforce Ustawienia narzędzi tool toggles server-side (#476) (
b9d7519) - ai-coach: add get_portfolio_holdings tool (wire portfolio into agent) (#475) (
e41e4c7) - dashboard: AHA Moment Indicator + first-run UX 80/20 fixes (#474) (
e8cfd84) - ai-coach: implement 3 missing read tools (expense breakdown, income sources, FX rates) (#473) (
539cd6e) - ai-coach: monthly $ cost ceiling per tier to cap AI COGS (#472) (
d969c5d) - ai-coach: TrenerAI 80/20 — wire search_cities, prompt caching, Sonnet 4.6, interactivity (#470) (
c6e3be5) - nomad-planner: per-city % share of trip spend in Monthly Breakdown (#467) (
250a489) - nomad-planner: English-proficiency indicator on leg cards (#466) (
c21102e) - nomad-planner: digital-nomad-visa indicator on leg cards (#465) (
69c992a) - cities: highlight soonest-FI city in the compare dock (#463) (
eb823d2) - cities: digital-nomad-visa indicator in the compare dock (#462) (
ef69f0f) - cities: English-proficiency “why” signal + show up to 3 reasons (#461) (
52d24a2) - cities: surface digital-nomad-visa availability on explorer cards (#460) (
3e3a6d3) - nomad-planner: travel-pace stat (avg stay per stop) (#458) (
3618da9) - nomad-planner: annual run-rate under Avg Monthly Cost (#457) (
64673f1) - cities: livability quick-stats in the LIVE compare dock (#456) (
54e37d6) - cities: annual-savings FI framing in the LIVE compare dock (#455) (
303bc18) - cities: per-metric winners in the LIVE compare dock (#454) (
7213111) - cities: per-metric winners in city comparison (#452) (
3f06bae) - nomad-planner: at-a-glance trip visa verdict pill (#451) (
0876e95) - nomad-planner: Schengen days-remaining in Visa Health (#450) (
96deb3b) - cities: per-city quick stats in comparison (internet/safety/climate) (#449) (
88cc49e) - cities: annualize comparison savings (FI framing) (#448) (
759563a) - cities: “Best value” highlight in city comparison (#446) (
1d8b6e4) - calculators: resolve all open audit items (tax brackets, scoring, Fat 33x, geo basis, i18n) (#443) (
4b2c19b) - planner: Calendar (Gantt) view of the trip + Timeline↔Calendar toggle (#440) (
36a060b) - cities: personalizable low-cost signal (drop hardcoded $1800) (#441) (
938161e) - nomad-planner: premium leg cards — real city photos + richer stats (#436) (
5784397) - landing: premium GSAP/Lenis hero polish + nomad-planner review deliverable (#424) (
9cdb44a) - calculators: resolve all open public-calculator audit items (#423) (
350cfc9) - admin: email tooling — chart fix, real conversions, broadcast/compose (#422) (
4968b01) - nomad-planner: premium UX/UI + animation + brand polish + 4 follow-ups (#419) (
b865495) - alpha: alpha-testing system — coming-soon gate bypass + Pro comp (#418) (
2b01d33) - seo: consolidate JSON-LD entity graph + GEO fixes (handles, llms.txt, FAQ, hreflang) (#415) (
31d920f) - legal: Right of Withdrawal + Complaints in Terms (UŚUDE/consumer law) (#398) (
dcd051a) - seo: glossary term pages → tools/hub internal links (#395) (
b359f60) - calculators: shareable scenario URLs on the FI calculator (#394) (
1316c8a) - seo: WebApplication schema on geo-arbitrage tool page (#391) (
d7c2677) - legal: cookie consent disclosure + correct DPO claim (JDG) (#390) (
76ca97f) - seo: AI-generated social-share image for geo-arbitrage tool (#392) (
f02ddc1) - billing: pricing rework S2 (surface+i18n consistency) + S3a (reprice safety) (#393) (
5237ced) - seo: link city→country breadcrumb for all indexable cities (#388) (
b22e676) - legal: Imprint / Legal Notice page (7 langs, footer-linked) (#385) (
96a77ee) - legal: data-breach notification + US state privacy (CCPA) sections (#383) (
22849cf) - brand: wire new iA icon logo across all logo touchpoints (#384) (
c0a672c) - seo: A-Z all-countries directory on /countries hub (#373) (
143ac03) - portfolio: geo-arb payoff on import-success step (#377) (
a6c6a20) - fi-score: geo-arbitrage payoff card (activation UI) (#375) (
25d2b8a) - geo: /api/v1/geo/fire-payoff route (geo-arbitrage activation) (#374) (
2e24b17) - portfolio: geo-arbitrage FIRE payoff core + design doc 22 (#372) (
9df6f73) - portfolio: NetWorthEquation on Portfolio + Plan (gate G1) (#371) (
d4f9969) - seo: strengthen city-page internal linking mesh (#366) (
c8e6524)
Bug Fixes
Section titled “Bug Fixes”- admin: add break-glass access and stabilize public paths (#489) (
54b1e8f) - ai: finish city recommendation responses (
c34a15b) - portfolio: humanize unknown city slugs (no more raw ‘abohar-india’) (#485) (
5a7ba52) - badges: render the badge-hero border (dynamic Tailwind class never compiled) (#484) (
41db97a) - blog: render markdown tables (header must precede the |-|-| delimiter) (#479) (
62af583) - ci: sync docs/package-lock.json — add missing openapi-types@12.1.3 (unblocks Deploy) (#478) (
f15567d) - cities: a11y — non-color “best” cue for compare-dock metric winners (#468) (
394a24d) - cities: surface “Best value” in the LIVE compare dock (#453) (
c80adf5) - planner: calendar views full-width + denser month grid (#447) (
45dc13a) - oidc: bump migration timestamp 160000->170000 (collision with develop’s fix_nomad_visa_hub_slug_match) (#445) (
a817d3c) - ci: prettier-format planner files to unblock develop CI (#442) (
8bf9eda) - deploy: bake PUBLIC_SITE_URL per env — fixes broken staging confirmation links (#437) (
d9f9e3c) - nomad-planner: UX clarity — dates, visa labels, plurals, relative scores, leg-cap (#434) (
d6dad04) - email-capture: 3 tool pages’ email capture was broken (fire_quiz/savings_rate/investment_growth) + 500→400 on validation (#431) (
dcde438) - admin: broadcast — explain empty audience + single-source-of-truth source list (#432) (
d1a7f6e) - nomad-planner: leg/optimize/wizard reliability bug sweep (#433) (
f57df64) - nomad-planner: visa-run “Add to plan” silently failed (false success toast) (#430) (
c6d88b0) - security: CSV formula injection + javascript: URI XSS in new admin features (#427) (
e259527) - ci: green up develop — middleware test indices + supabase types hash (#429) (
f9052fa) - deploy: raise builder heap to fix Docker build OOM (exit 134) (#428) (
31043bc) - security: disarm CSV formula injection in admin export (
f40f943) - referral: repair end-to-end referral flow, harden grant, add admin stats (#421) (
1818347) - waitlist: resilient email capture + trim EN client locale bundle (#408) (
4009554) - calculators: correctness, capture + anti-slop sweep across public tools (#417) (
30d1a53) - nomad-planner: QA fixes, visa-data correctness, first E2E suite (#414) (
c396cc9) - security: pin search_path on last 2 advisor-flagged functions (#412) (
46a566c) - security: lock 14 cron/ops SECURITY DEFINER functions to service_role (#411) (
a733122) - build: pre-compress client assets instead of the SSR bundle (#410) (
759917e) - security: sanitize rendered blog markdown (defense-in-depth XSS) (#409) (
116148c) - observability: capture FI-Score recalc + import-pipeline failures to Sentry (lane D slice 3) (#402) (
f3601af) - security: block users self-escalation (CRITICAL) + lock increment_referral_usage (#407) (
2508c5d) - security: harden SECURITY DEFINER function grants (systemic sweep) (#405) (
fca85b7) - portfolio: ETF classification + freshness banner + years-clamp (QA P2/P3) (#404) (
b89d5cb) - security: lock set_cached_api_data to service_role (cache poisoning) (#403) (
ef5c7ca) - observability: capture Stripe webhook handler throws to Sentry (#399) (
7a6dade) - security: harden public_calculations RLS (anon UPDATE + PII enumeration) (#401) (
cbb4de2) - security: lock extend_user_trial to service_role (privesc/revenue bypass) (#400) (
da99876) - billing: finish USD-only in PricingSection + drop unused priceNoteApprox (#397) (
2d7b863) - fi-score: preview returns fiNumber in base currency, not USD (F-2) (#396) (
643f514) - portfolio: FI number on portfolio overview no longer double-converts (F-2) (#389) (
1fc9410) - legal: correct privacy claims to match actual data flows (#386) (
3bc7b0c) - legal: real operating entity (Michał Wiatr JDG) + complete imprint (#387) (
488d7c6) - portfolio: value imported holdings at cost basis (F-1, P0 net worth 0) (#382) (
2b12cb6) - portfolio: readable quantities + unblock develop tests + QA findings (#380) (
86dd9ff) - portfolio: import commit now persists holdings (P0) (#379) (
723db72) - seo: include MDX blog posts in the dynamic sitemap (#378) (
4809810)
Documentation
Section titled “Documentation”- nomad-scoring: correct stale/contradictory normalization comments (#459) (
9c64e2c) - add DESIGN.md design-system reference (#416) (
a067cb7) - supabase: record 2026-06-24 security hardening in inventory SSOT (#413) (
44c4700) - portfolio: MVP value + pricing strategy + go-live status (#369) (
3fafe5d)
- alpha: wire ALPHA_GATE_SECRET + ALPHA_MASTER_CODE into deploy (#420) (
b034eff)
Chores
Section titled “Chores”- pricing: enforce Free+Pro two-tier model everywhere + reconcile docs/feature-list (#471) (
70cfd2b) - marketing: autopilot log 2026-06-25 — tax/passport Cyprus non-dom (#464) (
75843fc) - cities: remove dead V1 explorer + comparison components (#469) (
3c50a4e) - deps: bump the npm_and_yarn group across 3 directories with 3 updates (#322) (
00ee3c3)
Other Changes
Section titled “Other Changes”- Codex/city image cache long ttl (#493) (
f3e27a8) - [codex] configure PostHog experiments and proxy (#492) (
b3e759a) - [codex] Harden city media caching, geo ranking, and portfolio refresh (#488) (
f490e13) - [codex] complete ux pareto followups (#487) (
8526824) - [codex] unify city FI scenarios (#486) (
180774b) - Merge remote-tracking branch ‘origin/develop’ into feature/referral-system-fix (#444) (
6aa8d5b) - Admin: feature-flag correctness + audit log, dashboard metric fixes + AI settings (#426) (
fd39447) - Feat/public calculators audit (#425) (
4844968) - [codex] Polish premium landing brand experience (#406) (
a69a5ef) - i18n(public): complete de/es/fr/nl/pt parity for public pages (#381) (
3b769e7) - content(blog): digital-nomad taxes & 183-day rule pillar, all 7 languages (draft) (#376) (
2feb273) - content(blog): “4% rule outside the US” pillar, all 7 languages (draft) (#370) (
6a2e42d)
v1.17.0 (2026-06-23)
Section titled “v1.17.0 (2026-06-23)”Features
Section titled “Features”- seo: deterministic per-city narrative (unique on-page content) (#364) (
4139a08) - seo: stage-2 on-site — FAQPage schema (EN+PL) + Dataset license (#361) (
6b92917) - portfolio: simple management panels, insights, real-estate fields (#362) (
279faa5)
Bug Fixes
Section titled “Bug Fixes”- fi-score: rescale monthly rental-income slider range (#363) (
116fcd8) - help-page deep-linking + i18n + cleanup; myFund follow-up decisions; docops drift (#360) (
e676de1) - ci: never deadlock prod deploy waiting for a migrations run (#358) (
25b8dab)
Other Changes
Section titled “Other Changes”- [codex] polish PL locale copy (#359) (
a29745d) - Feat/brand v2 and seo launch (#357) (
135e478)
v1.16.0 (2026-06-22)
Section titled “v1.16.0 (2026-06-22)”Features
Section titled “Features”- brand+seo: brand v2 across 7 langs + SEO launch phase 1 (#353) (
98a9edc) - fi-score: split My Numbers & Goals into explained tabs (#337) (
3c041bc) - fi-score: opt-in dividend->passive-income derivation (P3-2) (
afeaff1) - fi-score: partial-snapshot dashboard nudge (P3 follow-up) (#334) (
e03c1b2) - fi-score: portfolio_snapshots.currency column (P3 core) (
f013b98) - fi-score: manual<->auto portfolio integration P0-P2 + design docs (
609b58d)
Bug Fixes
Section titled “Bug Fixes”- portfolio: asset-form review follow-ups (modal dropdown close, RE quantity corruption) (#348) (
d23d218) - cities: FI-lens base-city recognition, false income alert, Explorer default sort (D1-D3) (#346) (
80fe08d) - cities: set Content-Type on save-city + logout for Astro 6 checkOrigin (#345) (
73e4af9) - fi-score: rescale monthly rental-income slider range (#341) (
5144b20) - notifications: make email + push delivery work end-to-end (#343) (
67cdff2) - ai-coach: show conversation history sidebar for all plans (#340) (
2904262) - cities: resolve Internal Server Error on /dashboard/cities/compare (#339) (
2399e73) - mobile: restore draggable/hideable AI FAB + fix notification read panel (
e5b969e) - db: grant SELECT on country_tax_rates (RLS-without-GRANT 403) (
8e4e763) - p3: resolve 67 of 73 pre-MVP P3 (Low/Info) audit findings (
c5ed58a) - p2: resolve 60 of 66 pre-MVP P2 (Medium) audit findings (
886b367) - p1: resolve all 23 pre-MVP P1 (HIGH) audit findings (
f242fac)
Documentation
Section titled “Documentation”- supabase: standard STG↔PROD pattern + skill; pin functions CI (#332) (
966e777)
Chores
Section titled “Chores”- seo: add IndexNow key file for instant Bing/Yandex indexing (#355) (
b934ee3) - seo: add IndexNow key file for instant Bing/Yandex indexing (#354) (
d88f6ea) - release: release-readiness audit fixes, full i18n fill, contact page (#344) (
ceadc53) - i18n: replace em-dashes with plain punctuation in UI copy (#342) (
0c3e43c)
Other Changes
Section titled “Other Changes”- [codex] simplify cities explorer for new users (#352) (
9b49588) - [codex] add cities relocation decision signals (#351) (
8275aa6) - Chore/release readiness prep (#349) (
fac71e9) - [codex] add community city ratings (#347) (
ac76fc1)
v1.15.0 (2026-06-17)
Section titled “v1.15.0 (2026-06-17)”Features
Section titled “Features”- rebrand: Wave 2, cities loop + portfolio tabs + FI Score + My Numbers
- rebrand: Wave 1, app shell IA + dashboard home + Cities Compare + foundation components
- portfolio: xlsx ingestion layer, per-sheet CSV lowering (B0)
- portfolio: synthesized estimated “Paid” dividend events, feature-flagged (A3)
- portfolio: myfund XML import, parser, wallet routing, mapping wizard (B3)
- portfolio: myfund.pl XML import, multi-wallet mapping
- portfolio: operations history per holding + routed holding rows (B6)
- portfolio: yields from market history + nightly dividend sync + provenance UI (A2)
- portfolio: transaction-backed holdings, initial lot scaffold + backfill (B1)
- portfolio: auto-fetch dividend data from market history (A1)
- portfolio: rebalance plan, buy/sell & smart-contribution suggestions
- portfolio: tiered price freshness + market-hours-aware refresh
- portfolio: income & dividends suite, myfund.pl use cases (UC1–UC7)
- portfolio: price_history table + daily EOD snapshot writers
- portfolio: per-provider cost observability + fix api_usage_log column drift
- portfolio: net-worth value-over-time chart
- portfolio: group holdings by category on the holdings page
- portfolio: add-holding by ISIN/ticker via EODHD resolution
- portfolio: multi-provider live prices: CoinGecko crypto + EODHD fallback
Bug Fixes (selected)
Section titled “Bug Fixes (selected)”- rebrand: portfolio sub-page content/routing hygiene
- rebrand: a11y for referral share, dashboard gauge/activity, icon ligatures
- deploy: Dockerfile Node 22 for Astro 6 + sync mcp-server lockfile
- cities: remove fake 5.0/5 ratings from public city cards
- dashboard: help shell, breadcrumb a11y, settings + safe 301s
- portfolio: canonical FI model + scenario labels + reference chip (P0-1)
- auth: GDPR consent line at signup + clearer referral banner copy
- marketing: replace fake Revolut/Wise/N26 logos with factual proof strip
- pricing: USD-primary display, never-$0 paid plans, ship all features
- portfolio: production gates, all audit BLOCKERs + HIGH items
- auth: password sign-in cookie sync fix (P0, broken on v1.14.0)
- portfolio: cross-surface data-sync fixes, currency, categorization, FI display
v1.0.0 (2024-01-15)
Section titled “v1.0.0 (2024-01-15)”Initial Release
Section titled “Initial Release”The first public release of the IndepAI API includes:
Public Endpoints
Section titled “Public Endpoints”-
FI Calculator (
POST /api/v1/calculator)- Calculate financial independence timeline
- Year-by-year projections
- Multiple scenario support
-
Portfolio Health (
POST /api/v1/portfolio-health)- 0-1000 health score
- Four scoring components
- Actionable recommendations
-
API Status (
GET /api/v1/status)- Health check endpoint
- Service status monitoring
Authenticated Endpoints
Section titled “Authenticated Endpoints”-
Assets API (
/api/v1/assets/*)- Full CRUD operations
- Portfolio summary
- Asset categorization
-
User API (
/api/v1/user/*)- Profile management
- Settings customization
- Notification preferences
-
Geo API (
/api/v1/geo/*)- City database (100+ cities)
- Cost of living data
- City comparisons
- Personalized recommendations
-
Tax API (
/api/v1/tax/*)- Multi-country tax calculator
- Special programs database
- Tax optimization suggestions
-
Feature Flags (
/api/v1/features/*)- Feature flag checking
- A/B testing support
Infrastructure
Section titled “Infrastructure”- OpenAPI 3.1 specification
- Zod-based request validation
- JWT authentication via Supabase
- Rate limiting by tier
- Consistent error responses
Versioning Policy
Section titled “Versioning Policy”The IndepAI API uses URL-based versioning:
https://indepai.app/api/v1/...https://indepai.app/api/v2/... (future)Compatibility Guarantees
Section titled “Compatibility Guarantees”Within a major version (v1):
- Existing fields will not be removed
- Field types will not change
- Optional fields will not become required
- New optional fields may be added
Breaking Changes
Section titled “Breaking Changes”Breaking changes will only occur in new major versions:
- Field removals or type changes
- New required fields
- Authentication changes
- Rate limit structure changes
Major version transitions include:
- 6-month deprecation notice
- Migration guide
- Parallel operation of old version
Subscribe to Updates
Section titled “Subscribe to Updates”Get notified of API changes:
- Email: Subscribe at indepai.app/developers
- RSS: indepai.app/api/changelog.xml
- GitHub: Watch our changelog repository