What shipped, what changed, what broke — updated as we build in public.
Fixed
llms.txt uses markdown name links (llmstxt.org) so Chrome Agentic Browsing / Lighthouse no longer flags “File does not appear to contain any links”Added
fbqAdded
/upcoming — single list for dated workshops (Ship It Week → /ship-it-15aug-b); evergreen doors stay on the same page; hub + workshop footers link here so expired weekends only need one edit1419750640009009) via config/analytics.json + assets/analytics.js — PageView sitewide; ViewContent on school funnels; InitiateCheckout + Purchase (value/INR, Razorpay payment_id as eventID) on checkoutconfig/school-blog-queue.json with ~3-day cadence; Owner Overview card + /checkin surface due posts and next anglesschool…/ship-it-15aug — 15–16 Aug (Sat 4–6 pm · Sun 12–2 pm IST), early bird ₹1,999 until 12 Aug then ₹5,999, 20 seats; Razorpay product ship-it-week + success page + confirmation emailschool…/ship-it-15aug-b — Hormozi/YC-style spine for A/B vs /ship-it-15aug; same Razorpay product + success pageChanged
config/ship-it-week.json)ship-it-pricingindex, follow) so both A and B can be discovered for A/B/ship-it-15aug — weekend feel, prep, and plain-language build/ship detail for non-tech visitors; soft cross-link to the short pitch/ship-it-15aug-b — concrete non-tech clarity (live URL, not becoming an engineer, workspace vs chatbot) while keeping sales close language; soft cross-link to the detailed pageFixed
@supabase/supabase-js; use shared server-lib RPC so per-post stats load instead of “temporarily unavailable”/ship-it-15aug-b — unify left alignment (hero, proof, pricing, countdown, CTA) so sections no longer mix centered and left layoutsAdded
/api/school-apply?action=create-order|verify-payment (Hobby 12-function cap); catalog in config/payments.jsonconfig/founder-workshop.json — Founder Ship Stack pricing + cadence (early bird until dates announced)school…/pay-test — ₹11 pay-test product, noindexChanged
/7dayworkshop and /2dayworkshop CTAs open Razorpay checkout (UPI / card / netbanking) instead of WhatsApp; config/workshop.json ctaMode: razorpaybatchWhatsappGroupUrl or wa.me fallback)Added
/owner/ideas — park chat sparks in Supabase; queue Blog / Commerce / Service for later; Cursor /checkin command brings queued work back/park-idea command + scripts/park-idea.js — dump an ongoing chat into owner_ideas for laterChanged
Added
school-site/ hub and /7dayworkshop, plus craft-rephrased quote under Builder today on /craftassets/school/voices//2dayworkshop) Voices section — founder-framed rephrase of Tanuj’s kickstart feedbackChanged
Added
/owner/marketing — authenticated go-to-market desk with three offer-specific options (warm WhatsApp, Meta + revenue partner, LinkedIn/organic pipelines); hide/restore via browser localStorage; linked from Overview, Tools, and sidebar nav/owner/usage-profile — authenticated Cursor work-pattern profile from a generated local transcript + git snapshot, with an honest “Update via Cursor” copy-prompt handoff/owner/health/owner/journeys — anonymous visitor session stories with Today / 7d / 30d / custom date range; first-party page_events now store visitor + session IDswork.differentthandefault.com/revenue-partner — ecosystem map and flywheel, partner-selected commercial wedges, role ownership, focused 30-day pilot, controlled company-funded ad experiments, and illustrative revenue-share scenarios; noindex and unlinked from public navigation/api/contact and writes a work.revenue-partner CRM touchpoint without adding a Vercel functionChanged
cta_click fallback, so Journeys maps read real labelsFixed
Added
/solopreneur-journey/ (email unlock via /api/subscribe, full read + print/PDF at /solopreneur-journey/read/); ladder to discovery call, Founder Ship Stack, Independent by Designwork.differentthandefault.com/cofounder — who fits / who doesn’t, live project context, MCQ mutual-fit form with client score bands; submissions via /api/contact (source: cofounder-fit) + CRM tag/cofounder (ankitzen.com redirects to work — share the work URL)/owner/people, /owner/tools, and /owner/healthChanged
/cofounder/owner redesigned from a 7-tab monolith into a full dashboard home focused on pending work first, with CRM and builder ops moved to People, links moved to Tools, and health checks isolated on HealthAdded
work.differentthandefault.com/insightloop — idea-first short video feed MVP with honest Expo + Supabase framing/cursor-school), Workshop System (/workshops), Writing & Content Engine (/writing) — education, ops, and content as shipped proof alongside SaaScrm_contacts + crm_events on platform Supabase; email-primary dedup; backfill from builders, testimonials, workshop feedback, product requests, referrals/owner CRM tab — contact list, stage filter, timeline, notes; API via /api/todo?scope=crm (no new Vercel function)school.differentthandefault.com/showcase + submit form at /showcase/submit — moderated project stories, snapshots, hire opt-in?ref= code; workshop apply + landing clicks recorded in builder_referral_events (earnings later)/owner — pending builders + testimonials, hire status, referral events, hire-partner stub, ops links020_student_builder_showcase.sql — student_builder_submissions, builder_referral_events, Storage bucket builder-shotsChanged
builder-draft, so step-1 Continue no longer falls into the old workshop-apply validatorwp-2026-07-25 entry scores to match/api/school-apply?action=builder-* (Hobby 12-function limit — no new serverless file)Added
/workshop-pulse shows start/end + two lifts: session (start→end) and overnight (yesterday end→today start); written feedback is owner-email-onlyschool.differentthandefault.com/2dayworkshop — 2-day intensive (₹1,999), same Day 1–2 as 7-day; dates on WhatsApp/workshop-studio — session ritual + cover/skip checklist; linked from /ownerChanged
/7dayworkshop curriculum rewrite — Days 1–2 harness + ship stack (shared with Founder Ship Stack); Days 3–7 studio practice; fee ₹3,999 (early bird ended); cross-link to /2dayworkshop/blog on school.differentthandefault.com — Edge middleware rewrite to school-site/blog so apex blog/ static files no longer shadow host rewritesAdded
school.differentthandefault.com/live-feedback + room pulse at /workshop-pulse — day 1–7 check-ins (start/end), confidence 1–10, end-of-session one-liners; soft email/phone match; public averages only (no PII)school.differentthandefault.com/workshop-day2 — own ship, GitHub + Vercel, Pulse in/out; linked from /ownerChanged
/api/school-apply?action=workshop-feedback (Hobby 12-function limit — no separate serverless file)Added
school.differentthandefault.com/workshop-day1 — scroll sections + ship cues; linked from /ownerChanged
Added
/landing-8/ — source of the live one-offering homepage; noindex archive on /benchChanged
Added
Independent by Design at /independent-by-design/ — a commerce-focused 12-week founding cohort connecting DTD Journey, Cursor AI School, Portfolio, media, Honest Shelf, and peer support into one path from self-discovery to a live offer and customer conversations/landing-4…/landing-7 (declutter, brand-first+join, atlas, work log) — noindex; all drafts parked on /bench for review/landing-1 (through-line lite), /landing-2 (paths cluster), /landing-3 (map, not catalog) — noindex, for picking the True to Myself integration; current homepage untouchedtruetomyself.differentthandefault.com — public essay on the through-line (SocialGram → Portfolio, Journey, School, Blog, Work); branch vote + yes/no poll (localStorage); soft contact CTA via /api/contactChanged
/fund investor stub repositioned as /whatshappening — seven current/possible streams with shared “will work” and “I want this” voting, plus concrete ways to participate (intros, collaboration, brainstorming, ownership, funding, customers); /fund 302s to the new pageIndependent by Design made public — index, follow, sitemap + llms.txt, linked from DTD homepage “Behind this”Added
school.differentthandefault.com (school-site/) — offerings hub, flat course paths (/founder, /individual, /institutions, /partner), apply, brochure, empty school blog; apex /school/* left as legacy/bench — staging list for new builds until linked from the main site; config/bench.json source; gated via /api/owner-auth?bench=1; noindex; linked from /ownerfirst.differentthandefault.com — journey-based learning that documents understanding from first principles; shows thinking process, preserves uncertainty, invites expert dialogue; articles evolve with feedback and best discussions become podcast conversations.cursor/rules/first-principles-writing.mdc) — complete writing constitution for intellectual honesty, question visibility, and collective truth-seeking/thinking owner resolutions — Mark done requires /owner session; decision textarea + Visible publicly (default on) + optional Also add to Todo; stored in Supabase via /api/todo?scope=thinking (no new Vercel function)/owner — Thinking → Todo → Decisions → Changelog loop; pending-fork count; ?next= redirect/todo From Thinking section — opt-in follow-ups from cleared forks; owner can Mark shipped/start-your-journey/ — inspiration from DTD Portfolio people, self-discovery questions, niche-money advice, coaching + community (mostly coming soon); homepage top-right CTA; form unlocks ₹999 first discovery-call paywall (WhatsApp/email)/traffic and /insights — busts API cache (?refresh=1) so visitors and pageviews reload from one snapshotChanged
portfolio.differentthandefault.com instead of /people; DTD Portraits hub retired — /people and /people/:slug 301 to the portfolio subdomain/api/honest-shelf-request (Vercel Hobby limit: 13→12 functions); migration 017_product_requests.sql with RLS policy for anon insertsschool.differentthandefault.com/7dayworkshop (closed page, Razorpay CTAs, real 25–31 Jul schedule); subdomain hub / restored as full school site/7dayworkshop pricing — regular ₹3,999 · early bird ₹1,999 till Wed 22 Jul (from live batch offer)/7dayworkshop CTAs open WhatsApp chat (for now) with a prefilled early-bird join messageschool.…/) FAQ updated with real buyer hesitations (databases, Cursor vs Claude, Cursor cost, workshop fee/early bird, recordings)Fixed
/traffic Certain readers mixed Umami visitors with first-party page lists — numbers looked out of sync; lens now stays on one sourceget_umami_traffic_insights RPC on platform Supabase so Certain readers reads Umami tables directly (page paths + views) instead of a partial HTTP API fallback; granted execute to anon so Hobby env with only SUPABASE_ANON_KEY can call itfetchUmamiInsightsRaw was defined but not exported from server-lib/supabase.js — Certain readers silently fell back to Umami HTTP /metrics (400 → empty page lists while visitors still updated)Changed
Fixed
grid-column: span 2 no longer break single-column mobile layout; forced to span 1 on mobileAdded
/insights — Google Search Console on-site (queries, pages, CTR, daily impressions, sitemaps) via /api/analytics/gsc; gated by /owner; noindex; wired from owner homecapture-page-shots.js uploads 1200×630 first-fold PNGs to Supabase Storage og-shots; config/page-shots.json index; pipeline/linkedin thumbnail + Download image for manual attachChanged
/traffic showcase draft; new essay draft for vibe-coder → AI product builder/api/og (avoids Vercel function limits); /api/og remains fallback when no shot exists/traffic redesigned as a decision board — Certain readers lens, named sources, intent clicks, page purposes, and this-week’s moves (not vanity tabs)/traffic copy — Readers / All visits (was Outside / Include my visits); human CTA labels instead of raw cta_click; notes written for public visitors/api/testimonials; analytics routes (ping, summary, insights) merged into /api/analytics/[route] (≤12 serverless functions per deploy)Fixed
/traffic — analytics catch-all [...path] does not work on non-Next Vercel; use /api/analytics/[route] so ping/summary/insights resolve againAdded
config/asset-sources.json, scripts/fetch-portrait-assets.js, .cursor/skills/image-curator/; fetches website/OG images into assets/portfolio/ and updates portfolios config/people/hitesh-devra; config/portraits.json + scripts/sync-portraits.js; /people/ index with image cardsportfolio.differentthandefault.com/[name] one-page profiles; config/portfolios.json + scripts/sync-portfolios.js; landing at /portfolio/; ₹199 launch / ₹999 regular (friends-free phase for first 5); demo at /demo on subdomain/craft/reflect — mirror page for private learning notes (remember as, good fit, grow into); optional publishable words; linked from /craft/submitChanged
build-sources.js/api/contact with instant queue confirmation/mayur-sontakke, ember theme) from public LinkedIn and nomadgao.com; contact CTA supports external URL when no email/abhishek-bose, indigo theme) from public LinkedIn and remoteindian.com/api/reflections + reflection_submissions Supabase table — owner views on /craft (Mirror section); public submit via /api/testimonials action reflect_submitscripts/lib/changelog-rollup.js rolls [Unreleased] bullets into ## YYYY-MM-DD on sync-docs.js (git blame date); backlog split into dated sectionsFixed
/api/og deploy — restore Node.js runtime (edge runtime caused middleware to bundle @vercel/og and fail production deploys)exceeded_serverless_functions_per_deployment on Hobby plan (12-function cap) after adding /api/reflections and analytics endpointsRemoved
Added
/craft page — design foundation → AI-native builder narrative (three acts, differentiator, testimonials from config/testimonials.json); cross-links on journey, about, ventures, and /foundersconfig/testimonials.json + scripts/sync-testimonials.js — era-tagged testimonial slots (founders-01, product-scale, builder-now); populate and run sync before deploy/craft; moderated submission form at /craft/submit + /api/testimonials + testimonial_submissions table (owner approves on /craft when signed in at /owner)Changed
/craft/submit — minimal public form (full name + words only); role, era, and links filled in by owner before publish/craft — delete or unpublish submitted testimonials (pending + published); sign in at /owner firstAdded
/traffic Umami insights tabs — Geography, Sources, Engagement via /api/analytics/insights; self-hosted Umami uses UMAMI_API_USER + UMAMI_API_PASSWORD (dashboard login) on main Vercel project/traffic source toggle — Outside traffic (Umami, default) vs Include my visits (first-party Supabase); preference saved in browserAdded
edit_comment / delete_comment actions on /api/blog and /api/todo (owner session required)/owner — cross-subdomain signed cookie (.differentthandefault.com); Umami + Vercel private analytics off when signed in; public /traffic still counts owner visits; DTD_OWNER_PASSWORD env; api/owner-auth.js + server-lib/owner-auth.js for future gated featuresChanged
posts.json + article metadata)/todo, /pipeline, /linkedin, /traffic), transparency pages (/changelog, /thinking), /people/, play routes (already noindex), school form/gated pages (/school/apply, /school/brochure), and per-ADR URLs; sync-pipeline.js no longer re-injects pipeline slugsAdded
config/blog-clusters.json + scripts/sync-blog-clusters.js — topic hub pages with reading order, frameworks, future essay ideasscripts/lib/blog-seo-aeo.js — per-post AEO fields (question answered, central claim, Default vs Different)/blog/capability-economy/): scarce resource shifts from information to human capability; AI accelerates the shift; scheduled for 2026-07-08/blog/education-nation-building/): human capability as upstream infrastructure; employment vs value creation; character as national infrastructure; scheduled for 2026-07-07assets/blog-schedule.js/blog/universities-wrong-metric/): placements as proxies vs value-added transformation; input/output traps; growth radar; dashboard comparison; companion to A Working Thesisblog-engage.mdc — new blog posts require diagrams, interactives, ZenRead, and engagement figures/thinking inbox — pending decisions view with Mark done (saved in-browser), grouped as needs review / sleeping on it / already leaning; blog-as-thinking-engine fork parked in Thinking/school (or /school/brochure) before the detailed curriculum brochure; Resend audience source school-brochure; access remembered in-browser (copy stays implicit — no “email to unlock” language)/school/apply — interest form for company-sponsored employees (name, company, role, sponsor contact, why FDE path); /api/school-apply-founder emails + Resend audience school-founder-apply; linked from /school and /school/individualdtd-umami at analytics.differentthandefault.com; Supabase platform DB; config/analytics.json + scripts/sync-analytics.js; tracker on apex + work subdomain; social pipeline UTM paramsChanged
<title> (H1 unchanged); BlogPosting schema; Continue Reading + author footer; scripts/lib/blog-seo-meta.js + apply-blog-seo.jsvercelInsights: true in config/analytics.json); was off since Umami deploy on 3 Jul/traffic — tabbed detail (Overview, More detail, What’s working); plain-English insights; section + referrer breakdowns; migration 010_analytics_summary_richer.sql/todo and changelog (scripts/lib/auto-docs.js); optional `` on changelog bulletsFixed
/traffic stuck on “Collecting…” — analytics API required api/lib/supabase (missing); now uses server-lib/supabase; Vercel SUPABASE_URL / SUPABASE_ANON_KEY set; anon grants for page_events insert + get_analytics_summaryAdded
/school/brochure — same design language as /school, expanded curriculum (four phases with what we do inside the course), weekly rhythm, print/PDF-friendly; linked from the program section on /schoolChanged
Added
/play/bubu-lion/: cute CSS lion on a grassy field; arrow keys to move; roar, dance, turn, jump, wave via buttons or R/D/T/Space/W; reuses Bubu Joy roar sound (noindex)/play/bubu-joy/: tap or keyboard pop with sound; mute toggle; /play/ hub for future games (noindex until portfolio case study)/blog/not-every-founder-should-stay-forever/): founders and companies have seasons; leaving as stewardship; founder spectrum; companion to founding builder series/blog/first-1000-days/): six phases of company building as a decathlon; founding builder zone; career examples; interactive phase map; companion to Founding as a Profession/blog/founding-as-a-profession/): founding as a craft beyond incorporation; track record, product→company arc, meaningful equity, interactive timeline, ZenReadportfolio_giveaway analytics eventChanged
/Play, /play/Bubu-Joy → lowercase canonical); common /Play and /PLAY redirects in vercel.json/play/make-one/ with a quiet footer link so games stay the centre of /play//todo project roadmap — grouped by initiative (WorkForce, School, Career Lab, portfolio, Rishihood, blog, etc.) with sub-tasks in idea / planning / building / done; votes per task in Supabasenode scripts/generate-bubu-sounds.jsFixed
DATABASE_URL must use Supabase aws-1 transaction pooler (IPv4); umami DB role needs BYPASSRLS on shared platform PostgresAdded
/blog/universities-human-potential/): universities optimizing for human potential, agency, and lifelong value creation; ZenRead; cross-linked from Career Design Lab Ch. 04Added
/career-design-lab/: manifesto, transformation framework, chapter TOC, subscribe CTA; living playbook repo (career-design-lab/source/, chapters.json); published manifesto + Ch. 01–02; sitemap, llms.txt, OG presets/school/institutions/partner: deep college/training institute engagement (student batches + internal systems / digitization); linked from institutional batches and founder School page; sitemap, llms.txt, OGwork/founders/ on work subdomain: theme "I help founders build and validate AI products from 0→1"; hello bar + mailto CTAs; sitemap, llms.txt, OG; footer link on main portfolioAdded
work/outreach/new-vertical/ (noindex, unlinked): founding product builder pitch for new-vertical engagements; email-only CTA.cursor/rules/outreach-copy.mdc: assertive yet humble tone; no scarcity/slot language; no phone on outreach pagesdifferentthandefault.com vs work.*); on-brand copy and curated links back into the sitework/opportunity-os/ on work subdomain; live card in portfolio grid; personal demo framing with screenshots (ADR-027)/api/og generates 1200×630 preview images (title, label, type) for Twitter, LinkedIn, WhatsApp; wired across blog, ADRs, school, changelog, and static pages via scripts/lib/og-url.js/school/individual 7-day workshop (build a cool app, ₹2,000); application form via /api/school-apply (name, email, mobile, why Cursor, prior attempts)/blog splits into Ek Alag Chashma (culture) and Building (work/school); new /blog/building/ landing links changelog, decisions, thinking, school, portfolio, pipelines/api/blog, assets/blog-engage.js; copy link, X, LinkedIn, WhatsApp; no-login comments via Supabase (004_blog_comments.sql)Changed
v1 in mono so serif doesn’t read as “6 vi”work/outreach/new-vertical/ to public /founding-product-builder on apex; index, follow, sitemap, llms.txt, OG; 301 from old work URL; small footer link on portfoliowork/archive/co-founder-era/ (noindex, unlinked)/blog/building/linkedin-audience.js, social-draft.js)Fixed
/api/og deploy — Node.js runtime + og.jsx (Edge could not bundle @vercel/og on static deploy); upgrade to @vercel/og 0.11Added
llms.txt at site root for AI-readable site summary/about — E-E-A-T hub with Person + Organization JSON-LD and social linksscripts/lib/seo-schema.js — shared JSON-LD builders for landing, ADRs, school FAQ_template.html — BLUF + Q&A sections, BreadcrumbList, FAQPage, related links scaffoldChanged
ZenReads — Inspired by Naval Ravikant's way of writing on every article and /blog/blog and article pages/longer-read/ URL)@graph (was WebSite-only)sameAs includes LinkedIn, X, Instagram, DTDseo-schema.js; sitemap adds /about, /pipeline, /linkedin, /traffic, /school/institutionsllms.txt auto-generated by sync-docs.js from posts.json, ADRs, and config/contact.jsonposts.json gains optional series field; sync-docs.js adds post URLs to sitemap.xml/thinking page — syncs from docs/THINKING.md; shows Context, Fork, and Leaning for open reasoning (this vs that)/api/todo wired to Supabase — public vote counts + feedback; migration supabase/migrations/003_todo_votes_feedback.sql/todo reframed — "Building in public" ops checks + "Open directions" vote forks with context; links to /thinking and /decisionsdocs/THINKING.md — Fork field replaces Ask; motto is reasoning in public before decisions land/todoAdded
/pipeline — tweet drafts, community votes, Post to X via Web Intent (no paid API)docs/THINKING.md, config/social-queue.json, social-draft.js, sync-pipeline.jsChanged
landing/index.html as apex; joke site-label only (removed separate www/index.html)school/institutions/INQUIRY.md — email-ready profile, topics, and commercials for institute outreach/traffic — views, top referrers, top pages/CTAs via /api/analytics/summary + Supabase page_eventsapi/analytics/ping and api/analytics/summary; migration supabase/migrations/001_page_events.sqldata-analytics for click tracking (ping on Hobby; Vercel custom events on Pro)/linkedin — longer post drafts, community votes, Post to LinkedIn via feed compose (no paid API)/traffic — footer link under Building in public (Changelog · Decisions · Traffic)linkedin-audience.js); decision pages show rule callout/pipeline, /linkedin, etc.) when changelog mentions a path; /changelog fallback on Twitterscripts/lib/linkedin-audience.js) — lesson first, technical ADR as fallback/pipeline)platform field (x | linkedin); social-draft.js generates both from changelog, ADRs, thinking, todoAdded
school/) with founder-focused copy, 6-month program, ₹10k/month, cohort of 5work/journey/) with full career story and LinkedIn linkconfig/contact.json) and scripts/sync-contact.jsChanged
ankitzen@icloud.com (centralized, one-click sync)Fixed
/workforce without trailing slash (absolute image paths)Added
/api/contact (Resend)/todo) with voting, feedback form, and seed roadmap itemsblog/, posts.json) — no CMSChanged
RESEND_API_KEY and Resend env var namesFixed
/index.html into landing/ (host-based rewrites)Added
vercel.json rewrites: work.* → portfolio, apex/www → landingDEPLOY.md with Vercel domains, Hostinger DNS, and smoke-test checklist