Vatify is a full-stack SaaS platform that helps Kenyan SMEs automate VAT compliance, reconcile M-Pesa statements against KRA eTIMS records, and file tax returns — all in one place.
vatify/
├── backend/ # FastAPI + SQLite REST API
└── frontend/ # Nuxt 4 (Vue 3) web application
cd backend
# Install dependencies
poetry install
# Copy and configure environment
cp .env.example .env
# Start the development server
poetry run uvicorn app.main:app --reload
# → http://localhost:8000# → http://localhost:8000/docs (Swagger UI)cd frontend
# Install dependencies
npm install
# Start the development server
npm run dev
# → http://localhost:3000Create backend/.env from the template below:
DATABASE_URL=sqlite+aiosqlite:///./vatify.dbSECRET_KEY=change_me_to_a_long_random_string# KRA SandboxGAVA_CONNECT_BASE_URL=https://sbx.kra.go.keKRA_PIN_VALIDATION_KEY=KRA_PIN_VALIDATION_SECRET=KRA_INVOICE_CHECKER_KEY=KRA_INVOICE_CHECKER_SECRET=KRA_NIL_FILING_KEY=KRA_NIL_FILING_SECRET=KRA_OBLIGATIONS_KEY=KRA_OBLIGATIONS_SECRET=# SMTP (Gmail example)SMTP_HOST=smtp.gmail.comSMTP_PORT=465SMTP_USER=your@gmail.comSMTP_PASSWORD=your_app_passwordSMTP_FROM_EMAIL=your@gmail.comSMTP_FROM_NAME=Vatify| Feature | Status |
|---|---|
| KRA PIN validation on signup | ✅ |
| Email verification (account activation) | ✅ |
| JWT auth with refresh tokens | ✅ |
| Multi-Factor Authentication (OTP via email) | ✅ |
| MFA resend with rate limiting | ✅ |
| KRA obligations sync (Sandbox) | ✅ |
| M-Pesa statement parsing & categorisation | ✅ |
| E-Slip history | ✅ |
| Tax returns management | ✅ |
| NIL return filing | ✅ |
| Profile + password management | ✅ |
| Password reset via email | ✅ |
- Passwords are hashed with
bcrypt_sha256 - JWT tokens use RS256 / HS256 via
python-jose .envis never committed — add your own from the template above- KRA API credentials are sandbox-only in this repo
MIT