Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
View construction invoices and project data
Translation pending
AI summary · website content
BusinessPython · TypeScriptGitHub @engrhasnainOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Demo for the second Conduto meeting. It shows how scattered project data (Excel cost sheets, Microsoft Project schedules, PDF contracts and change orders, Dynamics GP ledger exports) becomes one consolidated, verified and traceable view of project control and profitability, independent of the ERP decision.
It runs fully without any AI key. A local engine handles everything:
A Claude key only adds free-form answers and reading scanned PDFs.
All data is synthetic. 18 fictional projects (Ecuador, Peru, Brazil) and 150 generated source files in the formats Conduto actually uses. Project, client and person names are invented, and the UI says so everywhere.
| Screen | What it shows |
|---|---|
| Portfolio | All projects in USD: forecast vs bid margin, cost and schedule efficiency, pending change orders, alerts, auto-generated insights, and a strip linking to data quality. Filters at the top (status, country, terrain, health, search) drive every card, chart and table. Every card opens the list behind it (projects, contracts, margins, each pending change order with its PDF). Export to Excel |
| Data & quality | 150 files → 11.7k records → 18 projects → 100% traceable. Every counter, file-type chip, quality check and coverage cell opens the files or records behind it. Four automatic checks (see below) and a list of the problems they found, filterable by country. Cost-without-progress anomalies, coverage per project, and the trained models with their measured accuracy |
| Project | KPIs (each tile opens its detail: the cost and schedule efficiency tiles open an activity-by-activity breakdown); the "where is the margin going" waterfall and its drivers; S-curve; schedule Gantt; cost by activity; detected anomalies; the accounting-vs-Excel check for that project; change orders; events; welding production. Every number opens its source: the Excel cell, PDF page, Microsoft Project task or GP ledger row |
| Ask | Questions in ES/EN/PT. Without a key, a local classifier understands 19 question types, then runs read-only SQL or document search. Answers cite PDF pages and exact Excel/GP cells, and show how they were built. With a key, Claude answers free-form questions |
| Bids | Open bids read from the sales system (Dynamics 365 Sales in the demo). Every open pipeline bid is checked against what comparable closed jobs really cost: the margin left at the historical cost, the price needed to keep the planned margin, and the comparable projects. Won bids link to the project they became; lost bids keep their reason |
| Connectors | The ten connectors: three working in the demo (SharePoint/OneDrive project folders, Dynamics GP, Dynamics 365 Sales) with "Sync now", "Test the connection" and run history; six available for the pilot or after the accounting-system decision (SAP S/4HANA, Dynamics 365 Finance, Project Online, Primavera P6, Outlook, Power BI); one planned (daily site reports). Each shows what it reads and how it maps to the common model |
| Load data | A guided four-step flow (choose a file → the system reads it → you check → saved and traceable), with a plain explanation of why the screen exists. It shows what was understood in one sentence, lists only what needs a person's check, and keeps the technical detail folded away (see below) |
| Benchmarks | Historical cost per inch of diameter per kilometre and per kilometre, by terrain (filterable; each terrain card opens its projects), an overrun heatmap by activity, and a bid estimator |
| Methodology | Architecture, design principles, roadmap, and the data we need for discovery |
The four automatic checks on the Data & quality screen:
What Load data does with each file type:
Language switch (ES/EN/PT) is in the top bar. ?lang=en in any URL opens it in English.
| Model | What it does | Measured on | Accuracy |
|---|---|---|---|
| Cost-line mapper (char n-grams + logistic regression) | Excel labels in ES/PT/EN, abbreviated or misspelled → 18 standard activities | 82 hand-written labels never used for training | ~96% |
| Question classifier (words + char n-grams, entities masked) | Question → one of 19 question types, in 3 languages | 65 hand-written questions | ~89% |
Both train in a few seconds at startup. The errors are shown on the Data & quality screen; that is why a person reviews every import. Where the local engine is unsure, it falls back to document search instead of guessing.
backend/ FastAPI + SQLAlchemy (SQLite) + openpyxl/reportlab/pypdf + scikit-learn + Anthropic SDK (optional)
app/seed/ synthetic data: real .xlsx / .pdf / .xml / GP exports + database with lineage
app/ml/ label mapper, question classifier, entity extraction, training
app/services/ KPIs (earned value), anomalies, ERP reconciliation, data quality, benchmarks, search,
ask (local engine + Claude agent), ingestion (Excel/PDF/Microsoft Project, groundedness, triage), export
tests/ 42 tests (API, ingestion round-trips, models, checks, SQL guard, mocked AI paths, connectors and bids)
frontend/ Next.js 16 (App Router) + Tailwind 4 + ECharts
The dataset and models are generated by build.py (about 25 s), or automatically on first start if missing, so no database service is needed.
# backend
cd backend
python -m venv .venv
.venv/Scripts/pip install -r requirements-dev.txt # Windows (use .venv/bin/pip on macOS/Linux)
.venv/Scripts/python build.py # optional: prebuild the dataset (otherwise done on first start)
.venv/Scripts/python -m uvicorn app.main:app --port 8000
.venv/Scripts/python -m pytest -q # tests
# frontend (new terminal)
cd frontend
cp .env.example .env.local
npm install
npm run dev # http://localhost:3000
Optional: set ANTHROPIC_API_KEY before starting the backend.
claude-opus-5, with server-side refusal fallback).The repository deploys as two Vercel projects from the same GitHub repository: one for the API (backend/) and
one for the website (frontend/). Both run on the free Hobby plan.
backend → Deploy.
build.py (declared in backend/pyproject.toml), which generates
the demo dataset and trains the models, so they ship with the deployment.ANTHROPIC_API_KEY. Without it, everything runs on the local engine.https://conduto-api.vercel.app. Open
<address>/api/health to check it answers.frontend →
environment variable NEXT_PUBLIC_API_URL = the API address from step 2 → Deploy.CORS_ORIGINS to the website address (the default * also works).Use the projects' main .vercel.app addresses, not preview addresses: Vercel protects previews with a login by default.
How it behaves on Vercel:
backend/app/config.py). Files imported with "Load data" last while that instance is running, then the demo
returns to its clean state. For a presentation with one person clicking, one instance serves everything.Open the website a few minutes before the meeting so the API is warm. "Reset demo" in the sidebar restores the clean dataset.
Historico_…2019.xlsx: the local model maps 11/11 rows, with "Sold. + END" shown under "Needs your check"; totals reconcile; confirm and save; benchmarks go from 10 to 11.OC-012 PDF: every field verified in the text.OC-013: detected and queued for OCR. Line to use: "We don't guess.".mpp would need MPXJ).