changelog

everything we've shipped, in order. receipts below.

v3.1.02026-07-25
  • Full technical SEO pass: robots.txt, dynamic sitemap.xml, Open Graph + Twitter cards, and JSON-LD structured data (WebSite, SocialMediaPosting, ProfilePage/Person, CollectionPage).
  • Individual commits and profiles now get real per-page titles, descriptions, and share previews reflecting their actual content instead of a generic site-wide default.
  • Private routes (Settings, DMs, Admin, etc.) excluded from search indexing.
  • No ranking outcome is ever guaranteed by any SEO work — this is the full set of technical fundamentals done right, which is the honest, real version of that ask.
v3.0.02026-07-24
  • Upgraded Next.js (14.2.5 → 14.2.35) to close a known security vulnerability, plus a matching firebase bump.
  • Edit post — commits can now be edited after posting (shows an "edited" tag), instead of delete-and-repost being the only option.
  • Block/mute users — hides their posts from your feeds, and blocks DMs both directions. Manage blocked accounts from Settings.
  • Post view counts — authors now see how many people viewed their own commits.
  • Delete a single DM message instead of only whole conversations.
  • Keyboard shortcuts: g+h/e/n/m/b/p to jump around, / to search, ? for a shortcuts cheat sheet.
  • A subtle top-of-page loading bar on route changes, so navigation always feels responsive.
  • Accessibility pass — verified every icon-only button has a proper label for screen readers.
  • Verified with a real production build — 21/21 routes compile clean.
v2.3.02026-07-24
  • Fixed the Following tab: same root cause as the DM inbox bug from before — a where('in') filter combined with orderBy needed a manual Firestore index that didn't exist, so it silently failed. Sorted client-side instead; no index required now.
  • Full responsive pass: fixed a flexbox issue that could force horizontal scroll on narrow phones, added a proper breakpoint for very small screens (~320px), and tuned spacing/type scale so everything fits from small phones up to ultra-wide monitors.
  • Added two more decorative doodles — a little rocket on the home feed header, a trophy on your rank card in Settings.
  • Verified with a real production build — 21/21 routes compile clean.
v2.2.02026-07-24
  • Added hand-drawn style SVG doodles across every empty state and system page — empty feed, empty bookmarks, empty notifications, no search results, empty DM inbox, empty tag page, no-commits profiles, 404, error page, and the welcome/onboarding screen.
  • Small confetti doodle on a couple of success moments (saving your profile, resetting your password).
  • All doodles are theme-aware (colored via CSS vars) so they adapt across Light/Dark/Mint automatically.
  • Verified with a real production build — 21/21 routes compile clean.
v2.1.22026-07-24
  • Found and fixed two more instances of the same production-breaking bug class: the profile page and single-post page were Server Components fetching Firestore data (which includes non-plain Timestamp objects) and passing it straight into Client Components — invalid in the App Router, and exactly the kind of thing that shows as a generic digest-only error. Both converted to Client Components with proper loading skeletons, matching the rest of the app's pattern.
  • Verified this time with an actual production build (`next build`) rather than static analysis alone — it now compiles clean with zero errors across all 21 routes.
v2.1.12026-07-23
  • Fixed a bug breaking every single page in production: the Supabase client was being constructed at module load time, which Next.js still executes once on the server during SSR for every page (even for client components) — Supabase's realtime client touching browser-only globals during that server pass threw and took down the whole app. Now constructed lazily, client-side only, on first real use.
  • Fixed a second real bug on profile pages specifically: a function was being passed as children from a Server Component to a Client Component (an invalid pattern in the App Router — functions can't cross that boundary), which is exactly the kind of thing that shows as a generic, digest-only error in production. Profiles now compute ownership internally instead.
v2.1.02026-07-23
  • Bloom filters added in two real spots: username availability now skips a Firestore read whenever a handle is provably free, and bookmark-status checks went from one read per post in a feed down to one read total per session.
  • Real syntax highlighting via PrismJS on code snippets, themed to match all three app themes.
  • Lazy loading on images that scale with content (DM threads, media grids).
  • Infinite scroll (IntersectionObserver-based) on the main feed and Explore, replacing manual 'load more' buttons.
  • Optimistic UI everywhere it matters: posting, commenting, and following/unfollowing all update instantly and roll back cleanly on failure.
  • Profiles got a real upgrade: stats row (commits, stars earned, rank score) and tabs for Commits / Replies / Media.
v2.0.02026-07-23
  • Report/flag button on posts and comments, feeding a real admin moderation queue.
  • Client-side rate limiting on posts, comments, and DMs — plus a basic word/link spam filter.
  • Quote-commits, pinned commits on profile, @mentions (with notifications + links), and a Latest / For You / Following feed.
  • DMs leveled up: fixed a real bug where the inbox silently failed to load, plus group DMs, typing indicators, read receipts, and image attachments.
  • Admin panel got tabs: bulk select + bulk ban/suspend/delete, a full audit log of every admin action, and an analytics dashboard (signups/posts/DAU) backed by Supabase.
  • Pagination added to search/explore, client-side image compression before upload, and rank checks now read cached counters instead of scanning.
  • New onboarding flow for first-time signups, a PWA manifest + offline app-shell service worker.
  • Deleting anything — an account, a post, a comment — now actually cascades: posts delete their replies, accounts wipe their posts/replies/bookmarks/notifications/follows/DMs, nothing is just orphaned anymore.
  • Email verification removed completely, per request.
  • Real password rules (upper/lower/number/special character) with a live strength meter.
  • Real-time username availability checking on signup, X/Instagram-style.
  • Added a way to financially support Compile — sidebar, settings, and footer all link out.
v1.6.12026-07-22
  • Stopped silently swallowing verification/reset email failures — every failed send now logs the real Firebase error code to the browser console and shows an actual reason in the UI instead of just "try again".
  • Added specific messages for the most common real causes: Email/Password sign-in disabled, quota exceeded, and (most common) still running on placeholder Firebase config instead of a real connected project.
  • Password reset copy is now honest about Firebase's email enumeration protection — a 'sent' response doesn't guarantee an email went out if that address has no account, by design.
  • Full troubleshooting checklist added to the README for anyone still not receiving emails.
v1.6.02026-07-22
  • Actually fixed email verification for good: if your domain isn't in Firebase's Authorized Domains list yet, sending now falls back to Firebase's default flow automatically instead of failing silently.
  • Same fix applied to password reset links.
  • New standalone profile edit page (avatar, display name, bio, handle) — separate from Settings.
  • Settings got way more real: change email, change password, per-type notification toggles, one-click data export, plus theme/rank/danger zone.
  • Added local draft autosave (IndexedDB) — the composer never loses what you were typing.
  • Added an optional 'online now' presence dot on profiles, backed by Supabase (public anon key only — no admin credentials anywhere in the app).
v1.5.02026-07-22
  • Fixed a real bug: starring someone's post or following someone silently failed to update their rank/counters (Firestore rules were blocking it without erroring). Fixed.
  • Fixed rank badges disappearing on older accounts missing newer fields — now defaults gracefully instead of needing account recreation.
  • Fixed email verification & password reset links dumping you on a generic Firebase page — now they route through our own /auth/action page.
  • Added an "i verified it" button since Firebase doesn't auto-refresh your verified status in an open tab.
  • New followers and following list pages for every profile.
  • Every schema addition since launch is additive and defensive — nobody ever needs to delete or recreate their account for an update to work.
v1.4.02026-07-22
  • Email verification on signup + a resend banner if you're unverified.
  • Forgot password flow — real reset emails via Firebase Auth.
  • Delete account (with password re-confirmation) in Settings, under Danger Zone.
  • DMs are live — unlock at rank 5, auto-delete after 14 days to keep the database lean.
  • Big Firestore optimization pass: cached counters instead of collection scans for rank checks, denormalized DM inbox data to avoid N+1 reads.
v1.3.02026-07-21
  • Rank system: 10 earnable ranks (Newbie Committer → Legendary Shipper), auto-assigned from commits, stars, and followers.
  • Rank 11 (Owner) reserved for hand-picked admins — DM Zelvior@proton.me for exclusive ranks.
  • New owner-only admin panel: ban, suspend, delete, create, and assign ranks to any account.
  • Rank badges now show next to names on posts and profiles.
v1.2.02026-07-21
  • Comments — every commit now supports threaded replies (we call them PR comments).
  • Follows, followers, and a real notifications feed.
  • Bookmarks so you can save commits for later.
  • Forking a commit (our version of the repost).
  • Explore page — search people and commits.
  • Three themes: Light, Dark, and Mint.
  • Profile editing: display name, bio, avatar.
v1.1.02026-07-15
  • Zero-build static fallback (public/fallback) for environments without a Next.js build step.
  • Storage + Firestore security rules locked down: images only, 5MB cap, 280-char commits.
v1.0.02026-07-10
  • Compile launches. Push commits, star good ships, browse the build log.
  • Email/password auth, image-only attachments, full client + server validation.