Run any Skill in Manus
with one click
with one click
Run any Skill in Manus with one click
Get Started$pwd:
$ git log --oneline --stat
stars:0
forks:0
updated:January 13, 2026 at 17:29
SKILL.md
| name | architecture |
| description | The architecture of the project |
✅ Stack parfaite, rien à changer.
"3 couches backend, architecture composants frontend, zéro over-engineering"
packages/api/
├── src/
│ ├── context.ts # Context tRPC (session, prisma)
│ ├── index.ts # Init tRPC (publicProcedure, protectedProcedure)
│ ├── controllers/
│ │ ├── index.ts # AppRouter (combine tous les controllers)
│ │ ├── lead.controller.ts
│ │ ├── proposal.controller.ts
│ │ ├── template.controller.ts
│ │ └── tracking.controller.ts
│ ├── services/
│ │ ├── lead.service.ts
│ │ ├── proposal.service.ts
│ │ ├── template.service.ts
│ │ ├── tracking.service.ts
│ │ └── email.service.ts
│ └── repositories/
│ ├── lead.repository.ts
│ ├── proposal.repository.ts
│ └── tracking.repository.ts
Controller (tRPC)
Service
Repository
Client (tRPC call)
↓
Controller (validation + auth)
↓
Service (logique métier)
↓
Repository (DB access)
↓
Prisma (PostgreSQL)
apps/web/src/
├── app/ # Next.js App Router (routes)
│ ├── layout.tsx
│ ├── page.tsx
│ ├── login/page.tsx
│ ├── dashboard/
│ │ ├── page.tsx # Dashboard principal
│ │ └── leads/[id]/page.tsx # Détail lead
│ ├── proposals/
│ │ ├── new/page.tsx # Création propal
│ │ └── [id]/edit/page.tsx # Edition propal
│ ├── templates/page.tsx # Galerie templates
│ └── p/[token]/page.tsx # Page publique (propal partagée)
│
├── components/ # Composants UI réutilisables
│ ├── ui/ # shadcn/ui primitives
│ ├── leads/ # Composants leads (cards, forms, lists)
│ ├── proposals/ # Composants proposals (cards, stats, preview)
│ ├── templates/ # Templates React + registry
│ └── shared/ # Composants partagés (header, loader)
│
├── features/ # Logique métier frontend
│ ├── leads/
│ │ ├── hooks/ # Custom hooks (use-leads, use-create-lead)
│ │ └── types.ts # Types TypeScript
│ ├── proposals/
│ │ ├── hooks/
│ │ └── types.ts
│ └── templates/
│ ├── hooks/
│ └── types.ts
│
├── lib/ # Utilitaires
│ ├── auth-client.ts
│ └── utils.ts
│
└── utils/
└── trpc.ts # Config tRPC client
Pages (app/)
Components
Features (hooks)
Page (Server Component)
↓
Feature Container (Client Component)
↓
Custom Hook (tRPC query/mutation)
↓
tRPC → Backend
↓
UI Components (shadcn/ui)
Au lieu d'un éditeur WYSIWYG complexe, on code chaque template comme un composant React.
Avantages :
components/templates/
├── landing-agency-template.tsx # Template 1
├── saas-development-template.tsx # Template 2
├── design-studio-template.tsx # Template 3
└── registry.ts # Map template ID → Component
TEMPLATE_REGISTRY[templateId] + spread des propsPersonnalisation : via props (nom client, prix, services, etc.) stockées en JSON dans la table Proposal
❌ Ne JAMAIS faire :
✅ Faire simple :
/
├── apps/
│ ├── server/ # Backend Hono (entry point)
│ └── web/ # Frontend Next.js
│
├── packages/
│ ├── api/ # tRPC routes + logique métier
│ ├── auth/ # Better Auth config
│ ├── db/ # Prisma schema + client
│ ├── env/ # Variables d'environnement
│ └── config/ # Config partagée TypeScript
Principe : Les packages sont partagés entre apps. Si besoin d'une 3e app (mobile, etc.), elle réutilise api, auth, db.