commits
- Move serverActions.bodySizeLimit under experimental in next.config.ts
(Next.js 15.5 only reads it there, fixing 1MB upload limit)
- Add ensureActor helper that resolves DID doc from plc.directory to
get the actor's PDS URL before indexing firehose events
- Call ensureActor on every create/update event so blob proxy can
fetch images from the correct PDS
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Create lib/actions/pds.ts with server actions for all PDS writes
(createPost, like, follow, comment) to avoid bundling node-only
@atproto/oauth-client-node in client components
- Update CreatePostModal, LikeButton, CommentInput, FollowButton to
use server actions instead of importing agent.ts directly
- Fix callback route: redirect to /feed (not /inbox), use piktto-session
cookie name
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Complete rewrite from Zagup issue tracker to Piktto Instagram-style
photo SNS while preserving AT Protocol foundation.
- Rename @zagup/lexicons → @piktto/lexicons, app.zagup.* → app.piktto.*
- New lexicons: post (images+caption+tags), comment, like, follow
- New DB schema: post, postImage, postTag, comment, like, follow, notification
- New firehose handlers for all 4 collection types
- 11 XRPC routes: getFeed, getExplore, getPost, getProfile, etc.
- Blob proxy route for PDS image serving
- SSE broker keyed by DID instead of project URI
- Full Next.js UI: feed, explore, post detail, profile, notifications
- Components: PostCard, ImageCarousel, CreatePostModal, LikeButton, etc.
- SWR hooks, Zustand stores, and PDS write helpers for SNS operations
- Seed script with 3 actors, 8 posts, comments, likes, follows
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Preserves the complete Zagup issue tracker implementation including:
- AT Protocol lexicons (app.zagup.*) for projects, issues, statuses, etc.
- AppView with firehose indexing, XRPC routes, SSE
- Next.js web app with kanban board, issue list, project management
- OAuth authentication flow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Switch firehose from subscribeRepos (CBOR) to Jetstream JSON with
wantedCollections filtering for all app.zagup.* collections
- Update default FIREHOSE_URL to wss://jetstream2.us-east.bsky.network
- Add POST backfillFromPds route to sync existing PDS records into AppView
by calling listRecords and routing through existing firehose handlers
- Add CreateIssueModal with Zustand store, wired to server action
- Server action triggers backfill after PDS write for instant visibility
- Fix OAuth callback cookie handling and postcss config
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- settings.json: pre-approved Bash permissions (pnpm, npx, node, git, tsx)
- commands/: six project-specific slash commands
- /new-lexicon, /new-route, /new-page — scaffold new record/route/page
- /migrate, /seed — dev database helpers
- /save — commit + push + summarize + update memory
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Full monorepo setup with three packages:
packages/lexicons
- 9 record lexicons (project, status, label, issue, comment, cycle, reaction, membership, defs)
- 12 AppView XRPC query lexicons
- Hand-written TypeScript types mirroring all lexicon shapes
packages/appview
- Fastify server with Drizzle ORM + @libsql/client (SQLite, no native bindings)
- Jetstream firehose subscriber with 8 collection handlers and auto-reconnect
- 12 XRPC query endpoints: listIssues, getIssue, listProjects, getProject,
listComments, listCycles, getCycle, searchIssues, getMyIssues,
getActivity, getStats, subscribeProject (SSE)
- FTS5 full-text search over issue title+description
- SSE pub/sub broker scoped by projectUri for real-time updates
- Hydration layer for joining actors, statuses, labels onto raw DB rows
- Seed script for local development
packages/web
- Next.js 15 App Router + Tailwind v4 + SWR + Zustand + @dnd-kit + @tanstack/react-virtual
- Full AT Protocol OAuth 2.1 (PAR + PKCE + DPoP) via @atproto/oauth-client-node
- Localhost dev client_id with port-insensitive redirect_uri matching
- In-memory state/session stores persisted to global for hot-reload survival
- Cookie set directly on NextResponse to survive redirect boundary
- Authenticated pages: inbox, projects, board (kanban), cycles, issue detail
- Virtualized issue list, drag-and-drop kanban, real-time SSE revalidation
- Typed AppView read wrappers (appviewApi) and PDS write wrappers (records.ts)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Move serverActions.bodySizeLimit under experimental in next.config.ts
(Next.js 15.5 only reads it there, fixing 1MB upload limit)
- Add ensureActor helper that resolves DID doc from plc.directory to
get the actor's PDS URL before indexing firehose events
- Call ensureActor on every create/update event so blob proxy can
fetch images from the correct PDS
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Create lib/actions/pds.ts with server actions for all PDS writes
(createPost, like, follow, comment) to avoid bundling node-only
@atproto/oauth-client-node in client components
- Update CreatePostModal, LikeButton, CommentInput, FollowButton to
use server actions instead of importing agent.ts directly
- Fix callback route: redirect to /feed (not /inbox), use piktto-session
cookie name
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Complete rewrite from Zagup issue tracker to Piktto Instagram-style
photo SNS while preserving AT Protocol foundation.
- Rename @zagup/lexicons → @piktto/lexicons, app.zagup.* → app.piktto.*
- New lexicons: post (images+caption+tags), comment, like, follow
- New DB schema: post, postImage, postTag, comment, like, follow, notification
- New firehose handlers for all 4 collection types
- 11 XRPC routes: getFeed, getExplore, getPost, getProfile, etc.
- Blob proxy route for PDS image serving
- SSE broker keyed by DID instead of project URI
- Full Next.js UI: feed, explore, post detail, profile, notifications
- Components: PostCard, ImageCarousel, CreatePostModal, LikeButton, etc.
- SWR hooks, Zustand stores, and PDS write helpers for SNS operations
- Seed script with 3 actors, 8 posts, comments, likes, follows
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Preserves the complete Zagup issue tracker implementation including:
- AT Protocol lexicons (app.zagup.*) for projects, issues, statuses, etc.
- AppView with firehose indexing, XRPC routes, SSE
- Next.js web app with kanban board, issue list, project management
- OAuth authentication flow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Switch firehose from subscribeRepos (CBOR) to Jetstream JSON with
wantedCollections filtering for all app.zagup.* collections
- Update default FIREHOSE_URL to wss://jetstream2.us-east.bsky.network
- Add POST backfillFromPds route to sync existing PDS records into AppView
by calling listRecords and routing through existing firehose handlers
- Add CreateIssueModal with Zustand store, wired to server action
- Server action triggers backfill after PDS write for instant visibility
- Fix OAuth callback cookie handling and postcss config
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- settings.json: pre-approved Bash permissions (pnpm, npx, node, git, tsx)
- commands/: six project-specific slash commands
- /new-lexicon, /new-route, /new-page — scaffold new record/route/page
- /migrate, /seed — dev database helpers
- /save — commit + push + summarize + update memory
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Full monorepo setup with three packages:
packages/lexicons
- 9 record lexicons (project, status, label, issue, comment, cycle, reaction, membership, defs)
- 12 AppView XRPC query lexicons
- Hand-written TypeScript types mirroring all lexicon shapes
packages/appview
- Fastify server with Drizzle ORM + @libsql/client (SQLite, no native bindings)
- Jetstream firehose subscriber with 8 collection handlers and auto-reconnect
- 12 XRPC query endpoints: listIssues, getIssue, listProjects, getProject,
listComments, listCycles, getCycle, searchIssues, getMyIssues,
getActivity, getStats, subscribeProject (SSE)
- FTS5 full-text search over issue title+description
- SSE pub/sub broker scoped by projectUri for real-time updates
- Hydration layer for joining actors, statuses, labels onto raw DB rows
- Seed script for local development
packages/web
- Next.js 15 App Router + Tailwind v4 + SWR + Zustand + @dnd-kit + @tanstack/react-virtual
- Full AT Protocol OAuth 2.1 (PAR + PKCE + DPoP) via @atproto/oauth-client-node
- Localhost dev client_id with port-insensitive redirect_uri matching
- In-memory state/session stores persisted to global for hot-reload survival
- Cookie set directly on NextResponse to survive redirect boundary
- Authenticated pages: inbox, projects, board (kanban), cycles, issue detail
- Virtualized issue list, drag-and-drop kanban, real-time SSE revalidation
- Typed AppView read wrappers (appviewApi) and PDS write wrappers (records.ts)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>