← back to @david

active 132 entries 17 NOV 2025 → ongoing

Granular

Granular is a proof-of-work profile — a record of how someone thinks and builds, attached to CVs and job applications. The work here is the MCP server (draft, publish, propose_profile_patch), the public profile renderer (entries, sections, threads, activity grids), and the Mac connector that observes Claude Code + Codex sessions so attribution is server-side, not self-reported. Design for credibility, not magazine whimsy.

tags: granular · mcp · profile · attribution

All entries

  1. 25 MAY 2026 David decided: Bypassed the broken Granular hook to write nine days of entries straight to the database
  2. 25 MAY 2026 David's approach: Insisted the coach's onboarding be in-context LLM not hardcoded scripts
  3. 25 MAY 2026 David decided: iMessage handoff as the consumer signup path, with the agent typing naturally
  4. 25 MAY 2026 David decided: Refused dramatising the Kocatepe dossier despite finding financial distress
  5. 25 MAY 2026 David's approach: Used multi-hour deep OSINT as the input layer for each partner granular profile
  6. 25 MAY 2026 David decided: Rewrote partner card copy to refuse intimacy register
  7. 25 MAY 2026 David decided: Capped each partner gift profile at two pages for a single double-sided print
  8. 25 MAY 2026 David's approach: Set the open-questions section as the directional payload of a partner's granular gift
  9. 25 MAY 2026 David decided: Collapsed the /home dashboard into the user's public profile rather than maintaining two surfaces
  10. 25 MAY 2026 David debugged: Forced the '22,908 messages' hero and 'tools last 26 weeks' band on his profile to agree
  11. 25 MAY 2026 David decided: Hard-delete test users from Granular and Clerk so they can re-sign-up cleanly
  12. 25 MAY 2026 David decided: Default to frontier, never fall back to shitty alternatives
  13. 25 MAY 2026 David decided: Scheduling agents must be conversational, not a discrete settings UI
  14. 25 MAY 2026 David decided: Granular desktop opens to a proactive 24-hour overview, not an empty chat
  15. 25 MAY 2026 David decided: Remote 24/7 agents must run in the cloud with Slack, AgentMail, and full Claude-Code parity
  16. 25 MAY 2026 David asks: Does Granular need Graphiti to become a true knowledge graph, not just vector search?
  17. 25 MAY 2026 David decided: Turbopuffer plus a real knowledge graph, not string matching, is the recall layer
  18. 25 MAY 2026 David noticed: File-by-file copying does not scale; remote ingestion is the real architecture
  19. 25 MAY 2026 David decided: Mirror Dropbox read-only into Granular-owned storage for an always-fresh copy
  20. 25 MAY 2026 David decided: Goose chosen as the white-label runtime for the Granular desktop app
  21. 25 MAY 2026 David decided: Granular Brain is a company-wide brain, not a Dropbox-specific feature
  22. 25 MAY 2026 David noticed: PE firms' real pain is unstructured, scattered data, not missing chat UI
  23. 25 MAY 2026 David decided: Granular's PE desktop must be religious-art quality, not an MVP
  24. 25 MAY 2026 David decided: David asked for a 21-day manual backfill of Granular entries after Connect broke
  25. 25 MAY 2026 David decided: David scoped a partnership deck for Stitch rather than another pitch
  26. 25 MAY 2026 David decided: David rewrote the Granular pitch deck thesis around agent-orchestration as labour
  27. 25 MAY 2026 David decided: David commissioned the bullet-proof execution plan via an 8-agent team
  28. 25 MAY 2026 David decided: David approved publishing the Profile Integrity Constitution
  29. 25 MAY 2026 David noticed: David flagged the model-output-signing gap as the last unfixable layer
  30. 25 MAY 2026 David's problem: David framed the local-first spoofing problem
  31. 25 MAY 2026 David decided: David made local-first non-negotiable for Granular
  32. 25 MAY 2026 David decided: Banned poetic short-sentence prose from the firms deck
  33. 25 MAY 2026 David's approach: Redirected /firms to advertise CLI/API database access
  34. 25 MAY 2026 David decided: Repositioned the resume certificate as a private logged-in-only surface
  35. 25 MAY 2026 David debugged: Refused likely-cause speculation on Hugo's silent coach reply
  36. 25 MAY 2026 David decided: Demanded a real static snapshot of the example profile, not an edge-cached fetch
  37. 25 MAY 2026 David decided: Separated public granular profile from the paid verified credentials page
  38. 25 MAY 2026 David's approach: Specified profile-views and PDF-open as psychological upgrade levers
  39. 25 MAY 2026 David decided: Killed 'Featured verified profiles similar to David' as LinkedIn-skip copy
  40. 25 MAY 2026 David's approach: Specified daily coach tips as feedback-not-questions grounded in the user's own profile
  41. 25 MAY 2026 David decided: Reframed Pro/Max pricing around 'your profile advertises someone else'
  42. 25 MAY 2026 David decided: Shipped the Windows Connect app without Azure identity validation
  43. 25 MAY 2026 David decided: Killed the custom-connector explainer in favour of a deep link to the OpenAI store
  44. 25 MAY 2026 David decided: Ordered a 10-agent investigation into Windows/Mac Connect parity
  45. 25 MAY 2026 David's problem: Mobile signup blew up with too-many-redirects on Safari
  46. 25 MAY 2026 David's problem: The user should never have to think about what an 'entry' is
  47. 25 MAY 2026 David decided: Delegation rule: cross heaven and earth before asking the user to do anything
  48. 25 MAY 2026 David debugged: Cross-environment message count: 16.1B tokens, not 1.4B
  49. 25 MAY 2026 David noticed: MCP calls don't count toward a user's Claude Code or Codex usage
  50. 25 MAY 2026 David's approach: Granular Coach personality spec: a 20-something close friend, not a brand voice
  51. 25 MAY 2026 David decided: Proof-page metrics cannot be invented; every score needs a real computation
  52. 25 MAY 2026 David's approach: Proof page should feel like a Treasury or JPM document, not a startup landing
  53. 25 MAY 2026 David decided: Phone-first sign-in must exist before iMessage handoff ships
  54. 16 MAY 2026 David decided: Framed Granular's paid plans as removing ads from your profile, not as a feature list
  55. 11 MAY 2026 David debugged: Fixed Codex WSL update loop that persisted on every launch
  56. 09 MAY 2026 David's problem: Activity heatmap was oriented with future on the right, past on left
  57. 08 MAY 2026 David decided: Hid granular's search feature from production so it's invisible even to engineers in DevTools
  58. 03 MAY 2026 David's problem: Profile showing mock data instead of real computed analytics
  59. 03 MAY 2026 David noticed: writing in lowercase isnt a bit
  60. 02 MAY 2026 David debugged: Investigated why tool usage analytics showed mock data instead of real counts
  61. 01 MAY 2026 David debugged: Investigated activity grid position conflict across two visual panels
  62. 29 APR 2026 David decided: Decided to ingest 6 months of transcripts with 8 partitioned agents
  63. 22 APR 2026 David decided: Directed end-to-end build of Snitch MCP connector for Claude in a single day
  64. 20 APR 2026 David shipped: Added search box to granular homepage for profile discovery
  65. 18 APR 2026 David debugged: OpenAI API usage spiking to $300 in a single day on Granular
  66. 17 APR 2026 David decided: Designed granular installer agents as four parallel specialists for different platforms
  67. 15 APR 2026 David asks: Challenged whether tool and thread belong in the public kind taxonomy
  68. 09 APR 2026 David decided: Granular early-access flow should match Kerra firms application
  69. 05 APR 2026 David debugged: Caught demo profile photo rendering poorly at unzoomed scale
  70. 04 APR 2026 David decided: Audited granular MCP connector end-to-end with 8 agents
  71. 28 MAR 2026 David decided: Chose threads over projects as the profile grouping metaphor
  72. 28 MAR 2026 David decided: Chose 'Top firms find top candidates on granular' over the incumbent hero line
  73. 23 MAR 2026 David shipped: Shipped MCP security patches: OAuth consent flow, token exposure, scope enforcement
  74. 22 MAR 2026 David's problem: each entry needs first-principles context
  75. 19 MAR 2026 David debugged: draft_post returned 200 but no card
  76. 16 MAR 2026 David asks: Are artifact and tool valid entry kinds on a public profile?
  77. 14 MAR 2026 David noticed: Profile must read as a serious work record, not a casual publication
  78. 14 MAR 2026 David's problem: Activity grid rendered with future months on right, making recent activity invisible
  79. 12 MAR 2026 David shipped: Deployed granular MCP security patches across four exploitable bugs in the draft→publish path
  80. 10 MAR 2026 David decided: granular is not a blog
  81. 09 MAR 2026 David decided: MCP first, claude before chatgpt
  82. 06 MAR 2026 David decided: Banned kind-label symbols, kept their colors for text labels
  83. 02 MAR 2026 David asks: Asked whether granular should render artifacts inline, not as downloads
  84. 28 FEB 2026 David decided: Replace em dashes across all Granular pages with contextual rewording
  85. 27 FEB 2026 David debugged: Caught activity heat-map showing future months as empty
  86. 25 FEB 2026 David debugged: granular.work demo animation pacing and layout bugs
  87. 22 FEB 2026 David decided: Specified granular profile chat bar should expand and float on scroll
  88. 21 FEB 2026 David asks: How do profiles get updated without users having to remember to ask?
  89. 20 FEB 2026 David asks: Asked whether MCP connectors are always-on or require per-chat activation
  90. 19 FEB 2026 David decided: Granular MCP anti-lying design: tie profile updates to real outputs
  91. 18 FEB 2026 David debugged: Investigated why snitch MCP connector was not production-ready for workers.dev
  92. 15 FEB 2026 David noticed: Caught double-use of 'show' in granular landing page copy
  93. 14 FEB 2026 David decided: Anti-gaming constraint: AI cannot lie on a user's behalf in Granular
  94. 13 FEB 2026 David asks: how fast does a profile become legible
  95. 13 FEB 2026 David decided: Chose threads over projects as the profile grouping primitive
  96. 10 FEB 2026 David noticed: The firms page value prop is exclusive data access, not AI analysis
  97. 10 FEB 2026 David decided: Rebuilt Granular profile from scratch after finding it misrepresented David
  98. 08 FEB 2026 David shipped: codex history is a real workbench, not a chat log
  99. 07 FEB 2026 David decided: Chose threads over projects as primary profile structure
  100. 03 FEB 2026 David's problem: Granular profiles are confusing to first-time visitors
  101. 02 FEB 2026 David's problem: Snitch ChatGPT app had unexpected schema changes that broke the product
  102. 01 FEB 2026 David noticed: AI chat modal should not auto-scroll to follow streaming output
  103. 30 JAN 2026 David decided: Decided granular MCP connector must not allow the AI to lie on the user's behalf
  104. 30 JAN 2026 David decided: Launched 8 parallel agents to brainstorm granular profile redesign
  105. 29 JAN 2026 David decided: Kept kind colors but banned glyph symbols as kind labels
  106. 28 JAN 2026 David decided: Planned entry ingestion without LLM calls, partitioned across 8 agents
  107. 27 JAN 2026 David noticed: Agent timelines reflect a pre-AI-agent world and should be challenged
  108. 27 JAN 2026 David decided: Rejected pulse-based MCP cadence in favor of memory-layer reframing
  109. 26 JAN 2026 David decided: Kicked off full granular profile redesign with 8 vision-and-design agents
  110. 21 JAN 2026 David decided: Granular hero copy: 'Top firms hire top candidates on granular'
  111. 21 JAN 2026 David's approach: show him dont tell him
  112. 18 JAN 2026 David shipped: granular shipped from zero in three hours
  113. 13 JAN 2026 David decided: Investigated Granular MCP tool visibility to test whether tools are lazily loaded in Claude Desktop
  114. 11 JAN 2026 David noticed: Tool usage counts inflated by tool_results, not just user messages
  115. 07 JAN 2026 David's problem: Thread descriptions on granular profiles were vague and non-grounded
  116. 03 JAN 2026 David debugged: Snitch MCP connector draft_post failing with opaque tool error
  117. 31 DEC 2025 David decided: Redact not edit: chose redact as the copy for granular's privacy safety valve
  118. 26 DEC 2025 David's problem: Login broken on granular production — investigated who owns the account at granular.work/david
  119. 25 DEC 2025 David debugged: Investigated why login screen framing confused 'login' with 'signup' on granular
  120. 23 DEC 2025 David decided: Required two visual grids to be side-by-side in the profile hero, above the fold
  121. 21 DEC 2025 David decided: Require MCP writes to identify which AI tool authored them
  122. 20 DEC 2025 David decided: Decided granular should become Claude's memory layer, not just a publish target
  123. 19 DEC 2025 David shipped: Drove granular profile redesign end to end in one session
  124. 16 DEC 2025 David's problem: Glyph symbols for entry kinds rejected as inappropriate for a credibility product
  125. 16 DEC 2025 David decided: Planned Snitch MCP connector for Claude first, then ChatGPT
  126. 13 DEC 2025 David noticed: AI slop is identifiable by its contrastive sentence rhythm
  127. 02 DEC 2025 David's problem: Granular firms page confuses what data is exclusive to the product
  128. 01 DEC 2025 David decided: Commissioned granular MCP audit: full profile control plane vs narrow draft tooling
  129. 01 DEC 2025 David decided: Added anti-fabrication constraint to MCP connector audit
  130. 29 NOV 2025 David's problem: Signup onboarding complexity blocking the simplicity Kerra needs
  131. 26 NOV 2025 David debugged: Questioned whether activity count of 53k events was inflated by tool results
  132. 17 NOV 2025 David decided: Rejected magazine masthead framing for granular profiles

Set in EB Garamond, Inter, Plus Jakarta Sans, JetBrains Mono.

@david · granular