Creda is a personal income, invoicing, and relationship tracking system.
It is designed for individuals or small businesses who:
- have a mix of payroll and freelance income
- want clean, accurate invoices
- want to understand who pays them, how much, and when
- don’t want a full accounting system or sales CRM
Creda starts as a personal tool and is built to evolve into a SaaS product over time.
Creda tracks money received independently of invoices. Invoices are documents that can be public, emailed, and marked paid. When an invoice is marked as paid, Creda can automatically create a matching income transaction.
This keeps the system honest:
- invoices describe intent to bill
- income describes actual money received
- People & organizations (CRM-like)
- Income tracking (payroll + freelance + manual)
- Invoicing (document-style editor + public share links)
- Workspace concept (single active workspace, switch UI ready)
- Dashboard overview with live data
- Settings dialog (profile + account)
- Basic observability
Out of scope (for now):
- Accounting
- Tax automation
- Sales pipelines
- Subscriptions
- Bank syncing
- Expense tracking
- Payments processing (Stripe, etc)
This is a monorepo:
apps/
web/ – Next.js frontend
api/ – FastAPI backend
- Frontend: Next.js
- Backend: FastAPI
- Database: MongoDB
- Auth: email-based (session cookie)
The frontend and backend are intentionally decoupled and communicate via HTTP APIs.
Configured in the API service. Set these env vars:
SENTRY_DSNSENTRY_TRACES_SAMPLE_RATESENTRY_ENVIRONMENT
Prometheus metrics exposed at /metrics. Protected by a token:
METRICS_TOKEN(useX-Metrics-TokenorAuthorization: Bearer)
Use Prometheus or Grafana Agent/Alloy to scrape /metrics, then point Grafana at the Prometheus server.
- Add a Prometheus datasource (pointed at your Prometheus server, not
/metricsdirectly). - Import the dashboard JSON provided in chat for a starter layout.
The web app loads Umami only in production and when enabled:
NEXT_PUBLIC_ENABLE_ANALYTICS=true
Build args:
NEXT_PUBLIC_API_URLNEXT_PUBLIC_ENABLE_ANALYTICS
Environment:
API_BASE_URLFRONTEND_URL(used for public invoice links)- SMTP settings (email)
- Sentry + metrics settings (above)
See docker-compose.yml for the base deployment wiring. The web build uses the API URL and analytics flag at build time.
cd apps/api
cp sample.env .env
poetry install
poetry run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
Key envs in .env:
DATABASE_URL,DATABASE_NAMEJWT_SECRET_KEY,PASSWORDS_SALT_SECRET_KEYAPI_BASE_URL,FRONTEND_URLSMTP_*SENTRY_*(optional)METRICS_TOKEN(optional)
cd apps/web
pnpm install
pnpm dev
Key envs (set via .env.local or shell):
NEXT_PUBLIC_API_URLNEXT_PUBLIC_ENABLE_ANALYTICS
Creda is under active development and not yet production-ready, therefore I do use it myself.
Hosted version are available but not guaranteed stable.
Expect:
- breaking changes
- incomplete features
- rapid iteration
TBD