La une.Ce que c'est
En ligne
PSA
Le tableau de bord de l'argent d'une entreprise de services : soumission, contrat, facture, paiement et heures dans une seule appli, en français d'abord.
Automatisation des services professionnels. Les soumissions de mon entreprise roulent dessus aujourd'hui. Les écrans ci-dessous viennent de la démo publique; l'entreprise et tous les chiffres y sont inventés.

Composé.La pile techno
Sur quoi ça roule
Une appli Next.js sur la base de données partagée. Le code des taxes et des PDF vit dans des paquets partagés que les autres applis utilisent aussi.
Interface
- Next.js16.2l'appli et le portail client
- React19.2
- Radix + shadcndes composants personnalisés
- Recharts2.15les graphiques
Argent
- Stripe20le paiement des factures
- GST + QSTles deux taxes sur chaque document
- PDF renderersoumissions, contrats, factures
- ExcelJSles exports
Données
- Payload3.82les dossiers et l'admin
- Neon Postgresune base de données partagée
- Drizzle0.45les requêtes
- Better Auth1.5la connexion
Courriel + hébergement
- Handlebars + juiceles gabarits de courriel
- Resendl'envoi
- Vercell'appli et la démo
Sous presse.Comment ça marche
5 étapes, dans l'ordre
D'une soumission vide à l'argent à la banque. Chaque écran vient de la démo publique.
Bâtir la soumission
Quatre étapes. Les lignes sont regroupées sous des fonctionnalités, calculées en heures fois un taux. Le PDF se dessine à côté du formulaire pendant que tu tapes.

Passer la barrière d'envoi
La soumission ne peut pas partir tant qu'elle n'a pas un client, un projet, un mandat, un mode de paiement et un contrat en PDF.

Un seul lien pour le client
Il accepte, signe le contrat, remplit l'accueil ou demande une révision derrière un seul lien privé. Les demandes de révision sont triées par l'IA.
Se faire payer
Le lien de la facture ouvre un paiement Stripe. Les paiements arrivent dans Finances avec la TPS et la TVQ séparées.

Pointer les heures
Les heures de la carte de la journée tombent sur les fonctionnalités de la soumission : l'estimé et le réel sont côte à côte.

L'épreuve.Le code
La barrière d'envoi
export function evaluateSendGate(facts: SendGateFacts): SendGateResult { const missing: SendGateItem[] = [] if (!facts.hasClient) missing.push('client') if (!facts.projectName?.trim()) missing.push('project') if (facts.mandateCount < 1) missing.push('mandate') if (!facts.paymentMethod || !(PAYMENT_METHODS as readonly string[]).includes(facts.paymentMethod)) { missing.push('payment_method') } if (!facts.hasContractDraft) missing.push('contract') return { ok: missing.length === 0, missing }}Les deux façons d'envoyer une soumission appellent cette seule fonction; aucun écran ne peut la contourner.
La bobine.La démo
Le voir tourner
Corrections.Ce que ça règle
Les problèmes que ça règle
Des soumissions bâties dans un chiffrier, hors de tout système.Un constructeur en quatre étapes qui dessine le PDF pendant que tu tapes.
Des contrats envoyés avant que rien ne soit signé.Rien ne part tant que le contrat en PDF n'est pas joint.
Des factures impayées que personne ne voit avant les impôts.La vue d'ensemble s'ouvre sur ce qui est en retard et ce qui est dû.
Des prix fixes qui n'apprennent jamais des vraies heures.Les heures tombent sur chaque fonctionnalité; la prochaine soumission part de vrais chiffres.
La TPS et la TVQ calculées à la main.Les deux taxes sont calculées et séparées sur chaque document.
Le mot de l'éditeur.Pourquoi je l'ai bâti
Pourquoi ça existe
PSA a commencé comme outil de soumission pour des matériaux de construction, avec des prix comme « 14 tonnes de gravier à 42 $ la tonne ».
Quand mon entreprise est passée au logiciel, les soumissions sont devenues des heures. Un prix fixe sans heures mesurées, c'est un pari qu'on renouvelle à chaque mandat; alors l'appli a appris à suivre le temps par rapport à ce qu'elle avait soumis.

Face au présentoir.Mieux que la moyenne
Face aux outils habituels
Face à Harvest et FreshBooks. Leur côté a été lu sur les pages d'aide de chaque fournisseur le 2026-09-27.
| Quoi | La moyenne du marché | Cette appli |
|---|---|---|
| Étapes du client | Un lien pour accepter et signer; le paiement plus tard, sur une facture à part. | Un seul lien : accepter, signer, accueil, payer.page du fournisseur |
| Contrat | Une signature sur la proposition (FreshBooks), ou seulement accepter et refuser (Harvest). | Un contrat en PDF tiré de la soumission; rien ne part sans lui.page du fournisseur |
| Taxes du Québec | Un taux de taxe que tu configures toi-même. | TPS et TVQ intégrées, avec des préréglages pour d'autres industries.page du fournisseur |
L'achevé d'imprimer.Le temps que ça a pris
152 commits en 293 jours
- commits
- 152
- jours avec un commit
- 39
- jours, du premier commit à aujourd'hui
- 293
- Premier commit
- Passage des matériaux aux mandats logiciels
- Déménagé dans le monorepo
- Dernier commit
Mesuré : git log, mes propres commits sur l'appli, 2026-09-27.
Colophon.Sa place au registre