Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
GestLocPro는 임대료·수도·전기 관리, 연체 자동 알림·상태 보고서 보관, 다국어 지원으로 소유주·관리자·세입자를 돕습니다
GestLocPro suit les loyers, l'eau et l'électricité, relance automatiquement les retards et archive vos états des lieux. Multi-devises, bilingue, pour propriétaires, gestionnaires et locataires.
비즈니스TypeScript · JavaScriptGitHub @ndjoumessi접속 불안정운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Application SaaS de gestion locative — immeubles, unités, locataires, paiements, relevés de compteurs, états des lieux, travaux et cautions. Multi-devises et bilingue FR/EN. Deux paquets dans un dépôt : le client React (Vite) à la racine, et l'API Express + Prisma sur PostgreSQL dans server/. En production, un seul conteneur Railway sert les deux (Dockerfile) ; Vercel ne fait que relayer vers lui (vercel.json). Prérequis : Node 20 — la version du Dockerfile et de l'intégration continue — et Docker, pour la base.README 전문 보기 ↗
Application SaaS de gestion locative — immeubles, unités, locataires, paiements, relevés de compteurs, états des lieux, travaux et cautions. Multi-devises et bilingue FR/EN.
Deux paquets dans un dépôt : le client React (Vite) à la racine, et l'API
Express + Prisma sur PostgreSQL dans server/. En production, un seul conteneur
Railway sert les deux (Dockerfile) ; Vercel ne fait que relayer vers lui
(vercel.json).
Prérequis : Node 20 — la version du Dockerfile et de l'intégration
continue — et Docker, pour la base.
git clone https://github.com/ndjoumessi/gestlocpro.git && cd gestlocpro
npm ci # dépendances du client
npm --prefix server ci # dépendances de l'API
cp server/.env.example server/.env # configuration locale, jamais commitée
npm run db:up # PostgreSQL 17 dans Docker, port 5433
(cd server && npx prisma generate) # client Prisma : généré, pas versionné
(cd server && npx prisma migrate deploy) # applique les migrations existantes
npm --prefix server run db:test:setup # crée et migre la base gestlocpro_test
npx playwright install chromium # seulement pour npm run check
Puis deux terminaux :
npm --prefix server run dev # API sur http://localhost:3001
npm run dev # client sur http://localhost:5173
Le client relaie /api vers le port 3001 (vite.config.ts) : ouvrir
http://localhost:5173 suffit, et /api/health doit y répondre {"ok":true}.
Trois gestes de la liste se trompent facilement :
cd server et non --prefix pour Prisma. --prefix dit à npm où trouver
le paquet, pas dans quel répertoire lancer le programme : Prisma chercherait
alors prisma/schema.prisma à la racine et ne le trouverait pas.migrate deploy et non migrate dev sur une copie neuve : on applique les
migrations du dépôt, on n'en fabrique pas. migrate dev sert à celui qui
modifie schema.prisma.server/.env.test l'envoie sur gestlocpro_test, et un
garde-fou refuse toute base dont le nom ne finit pas par _test.| Public | Authentification | Application (/app) |
|---|---|---|
/ landing | /inscription | /app tableau de bord |
/inscription/:role | /app/parc · /paiements · /releves | |
/connexion | /app/etats-des-lieux · /travaux · /cautions | |
/mot-de-passe-oublie | /app/locataires · /signalements · /onboarding | |
/reinitialiser?jeton= | ||
/app/systeme · /portail |
/kitchen-sink affiche chaque primitive du système de design dans ses états.
src/
design-system/tokens.css source de vérité des jetons (couleurs, typo, espacements)
components/primitives/ bouton, carte, pastille de statut, champs, modale, graphes
components/controls/ sélecteurs de langue et de devise
components/layout/ en-têtes public et applicatif, gabarits
features/marketing/ sections de la landing
features/auth/ assistant d'inscription, validation
features/dashboard/ les douze écrans applicatifs
i18n/ dictionnaires FR/EN et provider
currency/ XAF, XOF, EUR, CAD, USD
data/ jeu de démonstration
design-system/tokens.css.--color-gold (#C58E3E) est un accent de marque : fond, bordure, icône, ou
texte sur fond sombre. Jamais du texte sur fond clair — 2.87:1 sur blanc.en.ts est typé contre fr.ts.{count} porte une variante
clé_one (et _many… si la langue l'exige). t() choisit via
Intl.PluralRules ; la clé de base reste la forme par défaut.aria-label="…" ni placeholder="…" — npm run lint:i18n s'en charge.npm run check # tout : types, lint, i18n, lectures, tests, navigateur
npm run check:rapide # types, lint, i18n, lectures d'inventaire, 1600+ tests
npm run check:server # le serveur, derrière une vraie base PostgreSQL
CETTE SECTION A MENTI PENDANT DES LOTS. Elle décrivait npm run check comme
« types + lint + chaînes en dur » alors qu'il enchaîne quinze portes au
navigateur et plus de mille six cents cas. Une commande qu'on croit légère parce
que sa documentation l'est se lance moins souvent qu'elle ne le devrait.
check:rapide tient les types, le lint, les gardes i18n, les lectures
d'inventaire et la suite de tests. check:navigateur ouvre un vrai Chromium sur
le paquet construit : débordement, contraste, cibles, modales, poids, politique
de sécurité, et l'espace connecté derrière un vrai serveur. Chacune sort en 1
quand elle trouve quelque chose.
npm run check DEMANDE MAINTENANT LA BASE DE DÉVELOPPEMENT. Deux portes au
navigateur montent le vrai serveur — politique-de-securite pour lire ses
en-têtes, espace-connecte pour ouvrir les quinze écrans de /app derrière
trois vraies sessions — et la seconde a besoin de PostgreSQL :
npm run db:up # le conteneur gestlocpro-db, une fois
Elle crée sa propre base, gestlocpro_porte, détruite et remontée à chaque
passage : elle ne touche ni celle du développement ni celle des tests.
npm run check le lance de
lui-même via scripts/mesure-ui.mjs, qui l'évalue sur
le paquet construit en deux thèmes et deux langues. Une seule source pour les
deux usages : une copie dériverait sans que personne l'apprenne.