Skip to content
DevMeme

DevMeme · Changelog

What shipped

DevMeme changes daily — this is the receipt. Each update covers everything that landed the day before, straight from the commit log. Currently showing the last two weeks (110 changes).

covering Sunday, July 12 · 10 changes

  • seo fix image alt and document caches 2ca3963
  • profile authored comments — desktop section + /profile/comments page + compact screen b81cf94
  • comments unify compact drawer with desktop — one flat list, all authors equal c480ba0
  • auth guest vote/reply prompts centered sign-in modal — controls stay visible 20c158c
  • hide trending rank badge for now (render-gated with false &&, not removed); flip unit assertions 93543a1
  • feat /changelog — daily digest of last 2 weeks from git log (unlinked, direct URL only) 8a15dc0
  • decommission new.devme.me: apex devme.me is production — drop alias from allowedDomains/CSRF example, flip script defaults + living docs (nginx now 301s new.devme.me → devme.me) fc9ca2a
  • og redesign default share card — dark brand, brag messaging (actually explained, L1-L4 depths, deadpan stats) 67883f8
  • analytics Microsoft Clarity tag (qz3eu0y36m, same project as old prod) in both layouts, prod-only f349c39
  • fix keep disabled communities response private a80f6ff

covering Saturday, July 11 · 12 changes

  • comments hover-reveal branch controls — resting rows are pure content afbbccd
  • comments density pass from full padding audit 10bb5ca
  • comments kill dead vertical band under rows — branch controls + rating into meta line 0f45eec
  • comments votes inline in actions row; auth-gate user controls signed-out 514f00c
  • fix rollback deletes replies deepest-first (UserComment parent relation forbids deleting a parent with live children, P2014) 4826c06
  • revert bot filtering from importer — extraction layer (root repo src/extraction) owns source cleanliness; importer trusts the JSONs b2f141b
  • seo compact pages are first-class in sitemap — self-canonical /compact/* (drop cross-canonicals to desktop + noindex on compact categories/tags), sitemap emits desktop+compact twin per entry, add /privacy + /terms, communities prepared but commented out, drop desktop rel=alternate mobile links 58158fd
  • feat skip group-bot pollution on import — bot authors (isBot flag / *bot username) and /command@bot invocations; no pseudo users for bots e32020a
  • gitignore generated brag-output dirs 1146f54
  • fix desktop comment thread UI: drop L2/L3 depth badges, icon-only Reply/Focus, single-rail indent, compact vote rail, no '-' rating placeholder, reply-count pluralization 84225ae
  • fix channel pseudo-user is dev_meme (real channel), not devmemez (stale June plan name) c01f44d
  • feat one-time Telegram discussion comments import as UserComment rows 0c03fe3

covering Friday, July 10 · 14 changes

  • fix compact profile visual scale 6966a1b
  • prioritize compact profile activity 3c5560f
  • fix compact account connection copy d2caf65
  • fix compact profile visual hierarchy 5bfe451
  • record compact staging verification 59bcd4c
  • focus compact auth sheets 2c7dd83
  • refresh compact launch evidence matrix d767860
  • clarify saved fallback thumbnails cb9fb39
  • align compact behavior documentation df2ee19
  • make compact trending context honest 9cc8a2e
  • polish compact meme interactions 4e7fff9
  • unify compact profile and saved flows 6459b1c
  • refine compact discovery browsing fecde44
  • polish compact navigation and theme ffc49d1

covering Wednesday, July 8 · 2 changes

  • Fix compact profile scrolling and spacing c3a04eb
  • Hide achievement notifications behind flag 0b84798

covering Tuesday, July 7 · 1 change

  • fix dedupe achievement notifications c6177c9

covering Saturday, July 4 · 14 changes

  • feat(auth) returning sign-in also merges legacy User.email owners (no EmailIdentity row) — github re-login now heals pre-identity duplicate accounts, not just Connect Email; ambiguous legacy match logs+skips instead of breaking sign-in. Tests. 4d70efa
  • feat(auth) auto-merge proven-same-person accounts — conflict throws (email_conflict/provider_account_conflict) become mergeUsers(); fixes Connect Email dead-end after github minted duplicate user (no email shared) + returning github sign-in that would hard-fail once email arrives. Survivor: sign-in => email-identity owner, link => session user. Source user stripped not deleted (stale sessions degrade, no 500). github /user/emails non-ok: retry once then throw (no more silent email-less duplicates). Legacy User.email (no identity row) merges on connect-email too. e2e-verified locally: A+B email users, B connects A's email => link=success, B owns both accounts+identities, A stripped, sessions intact. d536731
  • quiet-graphite P0: land the missing foundation the committed profile depends on 26b53c7
  • fix(auth) error redirects target /profile?auth=error, not hardcoded /compact — desktop users clicking expired magic links landed on the mobile-only compact profile (broken at desktop width, no message). Magic dead token adds &reason=link; middleware device-routes mobile UAs to /compact/profile preserving query. Compact ProfileFlow now toasts on auth=error (was silently ignored); both surfaces show expired-link-specific copy for reason=link. Tests updated + error-branch coverage. 0c967b0
  • fix(auth) backfill Account.email on returning sign-in — email captured only at account creation froze null forever (transient github /user/emails failure => permanent 'No email shared'); warn on /user/emails non-ok. Tests. e3f97e2
  • one model policy, all surfaces: main session (fable-5 high) orchestrates/judges; PRIORITIZE codex subagents (gpt-5.5 high) for all delegated work; purge codex-5.3-spark; dual visual verification codex+grok ba3fe13
  • model policy: Claude Code surface = fable-5 high orchestration, codex/gpt-5.5 high for all subagent work, dual visual verification codex+grok (grok-build) in parallel (owner directive 2026-07-04) 2d73723
  • CLAUDE.md align subagent rule with current global policy — background subagents allowed with lifecycle hygiene (stale ban removed) 3184307
  • fix(achievements) drop init-time route_open — astro:page-load fires on initial load too (both layouts have ClientRouter); init record double-counted every full load 696f6a4
  • fix(achievements) category/tag/route counters actually earnable — record route_open on every astro:page-load swap (init-only recording missed all ClientRouter navs); /category/ + /tag/ route opens drive categoryScout/categoryMapper/tagTaster/tagDiver (category:filter dispatcher is dead code, tag_open never dispatched); skip badge vibrate before user gesture (Chrome blocks + console error). Tests + docs. d4b93d2
  • push 400 bad_user_id guard on internal test-send (malformed ObjectID made prisma 500); QA smokes SMK-CAP-23..25 + matrix/arch cross-links; runbook mechanical checks 47ae0de
  • test(profile) repair 8 stale expectations vs shipped quiet-graphite UI (hero copy, aria-label stat tiles, SyncCard copy, sync toast, pref data-attrs). ProfileFlow suite green; trendingService.unit.test.ts still red — imports computeTrendBucketKeys/resolveRangeWindow that never existed in any commit (c1bf17c committed never-green test, redesign workstream to resolve) 47ec9d3
  • fix(achievements) restore profile grid CSS (6c39a7d excised profileCss; profile-flow.css has no .profile-achievement-* rules — inject shared achievementGridCss like CompactAchievementsPage); community achievements secret until communities.enabled launches (public-but-unearnable = product defect) e533e09
  • docs user-journey dashboard (119 US-* + 31 S#.#, per-step shots) + build pipeline + many-to-many cross-links af3f9bb

covering Friday, July 3 · 6 changes

  • quiet-graphite-gate include comments.css in blue grep (no ,#hex fallbacks); update msg for closure task. gate re-runs clean. (implementer subagent verification closure, no app source change) abb26a2
  • compact-qg range default+prop (today + links+viewer), types, deletes (0-use sub verified); tests+build+strand post; evidence+cross updated 6c39a7d
  • compact redesign: atomic integration checkpoint (gate script + profile pieces + test robustness + font hygiene; delete sidecar patches) c1bf17c
  • compact redesign: wire socials config + prop (spec Phase3), align discover subtitle, profile updates per subagent+spec 6c3c374
  • checkpoint 0e3c62f
  • Ship analytics achievements e632cff

covering Thursday, July 2 · 23 changes

  • Use centered comment vote ratings 9fb5f00
  • fix(auth) avatar ring uses actual DevMeme favicon, not >_ svg 47de01e
  • Complete vote wording visual fixes df86a82
  • Fix compact profile card sizing 670aab2
  • Bust achievement icon caches be32c0b
  • Move achievements to dedicated pages 933b3ef
  • Expand compact achievements 18234fb
  • Add missing achievement utilities 6068885
  • Add account connections profile UI d215e68
  • Unify vote language and icons 5d7c97d
  • Fix desktop auth header first paint eb94cf8
  • fix(achievements) restore full catalog ab1aaf1
  • fix(profile) derive taste from saved and liked 027ccd5
  • fix(view-tracking) sendBeacon for view pings — no 'Fetch failed loading' noise acfebf1
  • feat(api) GET /api/version — build-time commit SHA + built-at 49ef04f
  • docs fix stale public HTML TTL claims (14400 → 300) 9fada68
  • seo desktop→mobile rel=alternate links + host-aware sitemap origin af59e42
  • perf(css) composited first-run hint animation 8c30f80
  • perf(api) ack-then-persist beacon endpoints (analytics events/performance, meme view) 1712734
  • perf(feed) LCP — fetchpriority=high on slide 0, embed first-window details in /api/feed/queue 33241ff
  • feat(scripts) capture-screens.mjs — app-wide tour, coverage/showcase modes a6e8256
  • fix(auth) warm DevMeme sunrise avatar ring; drop Google-ish rainbow 0588905
  • docs(auth-ab) clicked event in category list; delivery confirmed, converted still pending 41f4f98

covering Wednesday, July 1 · 8 changes

  • fix(404) Cache-Control no-store — transient 404s (e.g. /sw.js mid-deploy) were browser-cached 4h via CF default TTL 1740172
  • fix(push) pushsubscriptionchange re-subscribe + gap-sweep docs 71d4b37
  • polish(meme-detail) hero hover = border recolor only; zoom-in cursor 4b7ac03
  • docs app-wide screenshot capture plan (coverage/showcase modes, S#.# traced) f99ce8b
  • Removed old, outdated research ebfdac4
  • Improve comment lifecycle anchors 8c786b2
  • fix(comments) keep joke likes after reload 3fea008
  • feat(comments) add pre-moderation setting fb51ac7

covering Tuesday, June 30 · 19 changes

  • feat(comments) AI jokes are replyable, threaded comments (desktop) 3caff96
  • fix(meme-detail) collapsed peek — vote actions + 'Read all' share one row fd2f69d
  • feat(meme-detail) unify comments (collapsed joke peek ⇄ threads) + hover action bar 5b28df0
  • fix(meme-detail) hero image no longer lifts on hover 51d5d18
  • chore(scripts) drop A/B smoke cleanup script (box has mongosh not bun; use one-liner) e9f6082
  • chore(scripts) scoped dry-run-first cleanup for A/B smoke-test events 78d6124
  • docs add parallel-agents coexist/don't-clobber rule be7cbf5
  • feat add desktop cards comments f4c7026
  • test(auth) make 00-auth-config no-creds asserts hermetic 46abf72
  • feat(auth) add distinct email_ab_clicked event (funnel: sent/opened/clicked/converted) 04a890f
  • docs(auth) document magic-link email A/B + relink analytics/api-reference 95c741a
  • feat(auth) 8-variant A/B magic-link emails + sent/open/convert tracking 735f205
  • feat(profile) merge stat tiles into one panel; fan apart on hover, click scrolls to section e3fb254
  • legal code-accurate privacy disclosures + terms hardening a1c4f94
  • style(auth) scrub remaining em dashes (preheader + internals) 9006590
  • style(auth) drop em dashes from magic-link email copy 2e21155
  • feat(auth) brand the magic-link email (terminal-lux) a3062ef
  • fix(auth) magic-link consume uses MULTI GET+DEL, not GETDEL 7290954
  • docs(auth) reflect Google/GitHub/Apple+email staging activation 3b39610

covering Monday, June 29 · 1 change

  • fix(compact) add standard mobile-web-app-capable meta (Chrome deprecates apple- prefix; keep both for iOS+Chrome) 17c2eae