Notre avis
Décrit les modèles de développement pour la plateforme juridique manus-talk-to-my-lawyer, incluant les commits par phase, les migrations de base de données, les modèles d'email et les mises à jour frontend.
Points forts
- Approche structurée par phases pour un développement incrémental
- Intégration complète des tests
- Procédures claires de migration de base de données
- Modèles d'email avec pattern 'fire-and-forget'
Limites
- Suppose une familiarité avec tRPC et Stripe
- Migrations spécifiques à Drizzle ORM et Supabase
- Détails limités sur les mises à jour frontend basées sur les rôles
Lors de la construction ou de la contribution à l'application full-stack manus-talk-to-my-lawyer en suivant ses conventions établies.
Pour des projets utilisant des stacks techniques différentes ou nécessitant un prototypage rapide sans phases de test formelles.
Analyse de sécurité
SûrThe skill is a documentation of development patterns for a TypeScript/Vite legal tech platform. It contains no executable commands or instructions that could harm systems. No security risks present.
Aucun point d'attention détecté
Exemples
I need to add a new column 'phone_number' to the users table. Use the database schema migration workflow.We've completed Phase 4 improvements. Run the phase checkpoint workflow to commit and update todo.Set up an email notification when a user's subscription is about to expire. Follow the email template integration pattern.manus-talk-to-my-lawyer Development Patterns
Auto-generated skill from repository analysis
Overview
This skill teaches development patterns for manus-talk-to-my-lawyer, a TypeScript/Vite-based legal technology platform. The codebase follows a phase-based development approach with comprehensive testing, structured database migrations, and integrated payment processing. The application appears to be a full-stack platform supporting multiple user roles (subscribers, employees, attorneys, admins) with email notifications, Stripe payments, and tRPC API architecture.
Coding Conventions
File Naming
- Use camelCase for all file names
- Test files follow pattern:
*.test.* - Phase-based test files:
phase*.test.ts - Database migrations:
drizzle/####_*.sql
Import/Export Style
// Use alias imports
import { something } from '@/shared/types'
import { db } from '@/server/db'
// Mixed export style - both named and default exports
export const namedFunction = () => {}
export default ComponentName
Commit Messages
- Average length: ~271 characters
- Common prefixes:
checkpoint,docs - Phase commits:
Phase X:orCheckpoint: Phase X: - Freeform descriptive style
Workflows
Phase Checkpoint Commit
Trigger: When finishing a major feature or improvement phase
Command: /complete-phase
- Implement feature changes across multiple implementation files
- Add comprehensive test coverage in
server/phase*.test.ts - Run tests and validate all pass (document XXX/XXX tests passing)
- Confirm 0 TypeScript errors with
tsc --noEmit - Create checkpoint commit with descriptive message:
Checkpoint: Phase X: [Feature description and testing summary] - Implemented [specific changes] - Added tests covering [test scenarios] - XXX/XXX tests passing - 0 TypeScript errors - Update
todo.mdwith completed phase progress
Database Schema Migration
Trigger: When adding new database fields or tables
Command: /add-db-column
- Update
drizzle/schema.tswith new schema definitions:export const newTable = pgTable('new_table', { id: serial('id').primaryKey(), newColumn: text('new_column').notNull(), createdAt: timestamp('created_at').defaultNow(), }); - Generate migration SQL file:
drizzle/####_description.sql - Update migration metadata in
drizzle/meta/*.json - Update
drizzle/meta/_journal.jsonwith new migration entry - Apply migration to Supabase database (via MCP or direct SQL execution)
- Update
server/db.tswith new query functions if needed:export const getNewTableData = async (id: number) => { return await db.select().from(newTable).where(eq(newTable.id, id)); };
Email Template Integration
Trigger: When adding new email notifications to the system
Command: /add-email-template
- Add email template function to
server/email.ts:export const sendNewNotificationEmail = async ( to: string, data: { name: string; details: string } ) => { // Branded email template implementation }; - Wire email sending into relevant tRPC procedures in
server/routers.ts:.mutation(async ({ input, ctx }) => { const result = await someDbOperation(input); // Fire-and-forget email sending sendNewNotificationEmail(input.email, result).catch(console.error); return result; }) - Add email template tests in
server/phase*.test.ts - Update
todo.mdwith email integration status - Ensure fire-and-forget error handling (errors caught and logged, don't block main flow)
Frontend Page Updates
Trigger: When implementing frontend features that span multiple pages
Command: /update-frontend-pages
- Update relevant page components in
client/src/pages/:// Ensure proper role-based rendering if (user?.role === 'attorney') { return <AttorneyView />; } - Modify shared components if needed in
client/src/components/ - Update routing in
client/src/App.tsxif adding new routes - Ensure responsive design and mobile compatibility
- Test across all user roles: subscriber, employee, attorney, admin
- Verify navigation and permissions work correctly
Stripe Payment Integration
Trigger: When adding new payment flows or modifying pricing
Command: /update-stripe-integration
- Update
server/stripe.tswith new checkout logic:export const createCheckoutSession = async (priceId: string) => { return stripe.checkout.sessions.create({ // Checkout configuration }); }; - Modify
server/stripeWebhook.tsfor webhook handling:case 'checkout.session.completed': await handleCheckoutCompleted(event.data.object); break; - Update
shared/pricing.tswith new pricing constants - Update frontend payment pages (
Pricing.tsx,Billing.tsx, etc.) - Add commission tracking in
server/db.tsif needed - Test payment flows end-to-end in Stripe test mode
Documentation Update
Trigger: When documenting architecture, features, or development processes
Command: /update-docs
- Create or update markdown files in
docs/or root directory - Update
README.mdwith project overview and setup instructions - Document system architecture in
ARCHITECTURE.md - Update
todo.mdwith current progress and next steps - Ensure documentation reflects current codebase state and deployment process
- Include code examples and configuration details
tRPC Procedure Addition
Trigger: When adding new API endpoints for frontend consumption
Command: /add-trpc-procedure
- Add procedure definition to
server/routers.tsor modular router files:newProcedure: publicProcedure .input(z.object({ field: z.string(), })) .query(async ({ input, ctx }) => { return await getSomeData(input.field); }), - Add input validation with Zod schemas for type safety
- Implement database queries in
server/db.tsif needed - Add comprehensive tests in
server/phase*.test.ts:test('newProcedure returns expected data', async () => { const result = await caller.newProcedure({ field: 'test' }); expect(result).toMatchObject({ /* expected shape */ }); }); - Wire frontend calls to new procedures using tRPC hooks
- Ensure proper role-based access control with middleware
Project TODO Tracker
Last Updated: 2026-03-04 Purpose: Shared TODO list across all coding agents (Claude, GitHub Copilot, Codex, etc.) Usage: Mark items as
[x]when completed. All agents should continue from the last completed item.
Phase 1: Foundation
- [x] Database schema (users roles, letter_requests, letter_versions, review_actions, workflow_jobs, research_runs, attachments, notifications)
- [x] Status machine enum and transition validation (submitted → researching → drafting → pending_review → under_review → approved/rejected/needs_changes, NO draft state)
- [x] Global design system (color palette, typography, theme)
Phase 2: Auth & Navigation
- [x] Role-based user system (subscriber, employee, admin)
- [x] Role-based routing and navigation
- [x] DashboardLayout with sidebar for each role (AppLayout component)
- [x] Login/auth flow with role detection and auto-redirect
Phase 3: Subscriber Portal
- [x] Multi-step letter intake form (jurisdiction, matter type, parties, facts, desired outcome)
- [x] File upload for attachments (S3 integration)
- [x] My Letters list page with status badges
- [x] Letter detail page (status timeline, intake summary, final approved letter only)
- [x] Secure data isolation — subscribers never see AI drafts or research
Phase 4: Employee/Attorney Review Center
- [x] Review queue with filtering (pending_review, under_review, needs_changes)
- [x] Review detail page with intake panel, AI draft editor, research panel
- [x] Claim/assign letter for review
- [x] Save attorney edit version
- [x] Approve/reject/request changes actions
- [x] Review actions audit trail
Phase 5: Admin Dashboard
- [x] Failed jobs monitor
- [x] Retry failed pipeline jobs
- [x] System health overview (queue counts, status distribution)
- [x] User management (role assignment)
Phase 6: AI Pipeline
- [x] Stage 1: Perplexity API research (jurisdiction rules, statutes, case law)
- [x] Research packet validation gate
- [x] Stage 2: OpenAI drafting from validated research
- [x] Draft parser/validator
- [x] Pipeline orchestration (status transitions, job logging)
- [x] Failure handling and retry logic
Phase 6b: High-Priority Additions
- [x] Deterministic research packet validator (validateResearchPacket)
- [x] Deterministic draft JSON parser/validator (parseAndValidateDraftLlmOutput)
- [x] Subscriber-safe detail endpoint (never returns ai_draft/attorney edits/internal research)
- [x] Notification system via Resend email (subscriber: needs_changes/approved/rejected; attorney/admin: pending_review/failed jobs)
- [x] Transactional email templates: status change, approval, rejection, needs_changes, new_review_needed
- [x] Resend API key configuration (via webdev_request_secrets)
- [x] Claim/assignment locking in attorney review queue
- [x] Retry failed job controls for admins
- [x] Idempotency protections for duplicate submissions/retries
- [x] Note visibility (internal vs user_visible) in review actions
- [x] Final approved version generation on approval (freeze version + current_final_version_id)
- [ ] PDF export / downloadable output for final letters (future enhancement)
Phase 7: Testing & Delivery
- [x] Vitest unit tests for critical paths (29 tests passing)
- [x] End-to-end verification (TypeScript clean, server healthy)
- [ ] Save checkpoint and deliver
Future Enhancements
- [ ] PDF export for final approved letters
- [ ] n8n workflow integration for letter generation
- [ ] Stripe payment integration for subscriptions
- [ ] Mobile PWA optimization
Phase 8: E2E Workflow Audit & Fix
- [x] Audit intake form fields → pipeline input mapping
- [x] Add 3rd AI stage: Claude/Anthropic final letter assembly (combines research + draft into professional letter)
- [x] Ensure pipeline status transitions fire correctly: submitted → researching → drafting → pending_review
- [x] Ensure review center claim/approve/reject correctly updates status and creates final version
- [x] Ensure approved letter appears in subscriber My Letters with full content
- [x] Ensure subscriber detail page shows final approved letter (not AI drafts/research)
Phase 9: Stripe Payment Integration
- [ ] Add Stripe feature via webdev_add_feature
- [ ] Subscription plans: per-letter ($299), monthly ($200/mo unlimited), annual ($2000/yr 48 letters)
- [ ] Checkout session creation with metadata
- [ ] Webhook handler for checkout.session.completed
- [ ] Atomic subscription activation (prevent race conditions)
- [ ] Commission tracking (5% employee referral)
- [ ] Employee coupon system (20% discount on per-letter)
- [ ] Pricing page UI
- [ ] Credit/letter allowance enforcement before letter submission
Phase 10: Spec Compliance Patches (from pasted_content_4)
- [ ] Add buildNormalizedPromptInput helper (trim strings, safe defaults, filter empty rows)
- [ ] Strengthen validateResearchPacket: require sourceUrl+sourceTitle per rule, prefer >= 3 rules
- [ ] Add subscriber updateForChanges mutation (re-submit after needs_changes)
- [ ] Add admin forceStatusTransition mutation (audited)
- [x] Add frontend polling/revalidation for researching/drafting/pending_review statuses
- [ ] Add status timeline component in subscriber LetterDetail
- [ ] Add subscriber update form when status is needs_changes
- [ ] Verify success path E2E (submit → research → draft → assembly → pending_review → claim → approve → subscriber sees final)
- [ ] Verify failure path (invalid research stops pipeline, invalid draft stops pipeline)
- [ ] Verify security (subscriber cannot access ai_draft/research/internal notes)
Phase 12: Stripe Payment Integration
- [x] Fix TypeScript error in AdminLetterDetail page
- [x] Add Stripe scaffold via webdev_add_feature
- [x] Configure STRIPE_SECRET_KEY and STRIPE_PUBLISHABLE_KEY
- [x] Create subscriptions and payments tables in database
- [x] Create Stripe products/prices: per-letter ($29), monthly ($79/mo), annual ($599/yr)
- [x] Build checkout session endpoint (tRPC)
- [x] Build Stripe webhook handler (subscription events, payment events)
- [x] Build subscription status checker middleware
- [x] Build billing portal redirect endpoint
- [x] Build Pricing page with 3 plans
- [x] Build Subscription status component in subscriber dashboard
- [x] Gate letter submission behind active subscription or available credits
- [x] Show upgrade prompt when subscriber has no active plan
- [x] Admin: view subscriber subscription status
- [x] Run tests and save checkpoint (29/29 passing, 0 TS errors)
Phase 11: n8n Workflow Integration & Frontend Polish
- [ ] Get n8n workflow webhook URL for the best legal letter workflow
- [ ] Activate the n8n workflow so webhook is live
- [ ] Update pipeline.ts to call n8n webhook as primary, with in-app AI fallback
- [ ] Add N8N_WEBHOOK_URL as environment variable
- [ ] Build admin letter detail page with force status transition dialog
- [ ] Add polling/revalidation to employee ReviewDetail for in-progress statuses
- [ ] Verify TypeScript compiles cleanly
- [ ] Run all tests
Phase 13: Dashboard Enhancement — Letters History & Payment Receipts
- [ ] Audit current subscriber dashboard, MyLetters, and Billing pages
- [ ] Add backend: letters list with search/filter/sort/pagination (tRPC)
- [ ] Add backend: payment receipts list from Stripe invoices (tRPC)
- [ ] Rebuild MyLetters page as full Letters History with search, filter by status/type/date, sort, pagination
- [ ] Build Payment Receipts page with Stripe invoice history, amounts, dates, downloadable receipt links
- [ ] Enhance subscriber Dashboard with summary stats (total letters, active subscription, credits used, pending reviews)
- [ ] Add recent activity feed on dashboard (last 5 letters with status)
- [ ] Add quick action cards on dashboard (Submit Letter, View Letters, Billing)
- [ ] Run tests, verify, save checkpoint
Phase 14: Paywall Flow Revision + Dashboard Enhancements
- [x] Add generated_locked status to schema enum and status machine
- [x] Update DB migration to include generated_locked status
- [x] Add payToUnlock mutation: create per-letter checkout, on success advance to pending_review
- [x] Build LetterPaywall component: blurred AI draft preview + Pay Now button
- [x] Update LetterDetail to show LetterPaywall when status = generated_locked
- [x] Update pipeline to set status = generated_locked after AI assembly (instead of pending_review)
- [x] Update Stripe webhook to handle letter unlock (generated_locked → pending_review)
- [x] Update MyLetters list: generated_locked highlighted amber with "Unlock for $29" badge
- [x] Update StatusTimeline: generated_locked step with amber lock icon
- [x] Update StatusBadge: generated_locked shows "Ready to Unlock" in yellow
- [x] Tests: 31/31 passing, 0 TypeScript errors
- [ ] Build Payment Receipts page with invoice history, amounts, dates, receipt links (future)
- [ ] Enhance subscriber Dashboard: subscription status widget, activity feed, quick action cards (future)
- [ ] Add date range filter to Letters History (future)
Phase 15: Post-Submission Email Notifications
- [x] Add sendLetterSubmissionEmail: branded confirmation email sent immediately after letter submission
- [x] Add sendLetterReadyEmail: "your draft is ready" email sent when AI pipeline sets generated_locked
- [x] Add sendLetterUnlockedEmail: payment confirmation email sent after Stripe unlock webhook
- [x] Wire sendLetterSubmissionEmail into letters.submit mutation (routers.ts)
- [x] Wire sendLetterReadyEmail into pipeline.ts Stage 3 completion (in-app pipeline path)
- [x] Wire sendLetterReadyEmail into n8nCallback.ts completion (n8n pipeline path)
- [x] Wire sendLetterUnlockedEmail into stripeWebhook.ts letter unlock handler
- [x] Tests: 35/35 passing, 0 TypeScript errors
Phase 16: Dev Email Preview Endpoint
- [x] Build server/emailPreview.ts: dev-only Express route at GET /api/dev/email-preview
- [x] Index page: lists all 9 templates with HTML and plain-text preview links
- [x] Per-template rendering: ?type=submission|letter_ready|unlocked|approved|rejected|needs_changes|new_review|job_failed|status_update
- [x] Query param support: ?name=&subject=&letterId=&state=&letterType=&mode= for realistic preview data
- [x] Guard: only active in NODE_ENV !== production (verified in tests)
- [x] Dev toolbar overlay showing template name and subject line in browser
- [x] Register route in server/_core/index.ts
- [x] Vitest tests: route export, dev registration, production guard (3 new tests)
- [x] Tests: 38/38 passing, 0 TypeScript errors
Note: This TODO list is synchronized across all documentation files. When completing items, update this section in all files to maintain consistency.
Testing Patterns
- Tests are organized by development phases:
phase*.test.ts - Comprehensive test coverage expected for each phase
- Test results documented in commit messages (XXX/XXX tests passing)
- TypeScript compilation must pass (0 errors) before commits
- Tests cover tRPC procedures, database operations, and email functionality
Commands
| Command | Purpose |
|---------|---------|
| /complete-phase | Complete a development phase with comprehensive testing and checkpoint commit |
| /add-db-column | Add new database schema with proper Drizzle migration |
| /add-email-template | Integrate new branded email notifications with fire-and-forget sending |
| /update-frontend-pages | Update multiple frontend pages with role-based considerations |
| /update-stripe-integration | Modify payment flows and webhook handling |
| /update-docs | Create or update project documentation |
| /add-trpc-procedure | Add new API endpoints with validation and testing |
Expert Next.js App Router
Developpement
Un skill qui transforme Claude en expert Next.js App Router.
Générateur de README
Developpement
Crée des README.md professionnels et complets pour vos projets.
Rédacteur de Documentation API
Developpement
Génère de la documentation API complète au format OpenAPI/Swagger.