SaveSafe Wallet is a microservices-based wallet platform for local development and testing. It includes .NET backend services, an Angular frontend, and supporting infrastructure (Kafka, Redis, Grafana, Loki) orchestrated with Docker Compose.
Core application services:
- Auth Service (.NET): authentication, JWT, admin bootstrap
- Wallet Service (.NET): wallet domain operations
- Payment Service (.NET): Stripe checkout + webhook handling
- AI Security Service (Python): consumes login events from Kafka
- Frontend (Angular + Nginx)
Supporting infrastructure:
- Redis: caching and shared state
- Kafka + Zookeeper: event streaming
- Firestore (Firebase): persistent storage for backend services
- Grafana + Loki: observability
- Frontend: http://localhost:4200
- Auth Service: http://localhost:5001
- Wallet Service: http://localhost:5002
- Payment Service: http://localhost:5003
- AI Security Service: http://localhost:5010
- Grafana: http://localhost:3000
- Loki: http://localhost:3100
- Backend: ASP.NET Core (.NET)
- Frontend: Angular
- Messaging: Apache Kafka
- Cache: Redis
- Database: Google Firestore
- Payment: Stripe
- Monitoring: Grafana + Loki
- Containerization: Docker + Docker Compose
- Docker + Docker Compose
- Git
- Stripe CLI (for local webhook testing)
- Firebase service account JSON for Firestore access
- Clone the repository.
git clone <repo-url>
cd SaveSafe-Wallet- Create local environment file.
cp .env.example .env- Edit
.envand set at least:
FIRESTORE_PROJECT_IDFIRESTORE_CREDENTIALS_PATH(default:./secrets/firebase.json)JWT_SECRET_KEYINTERNAL_API_KEYSTRIPE_SECRET_KEYSTRIPE_PUBLISHABLE_KEYSTRIPE_WEBHOOK_SECRET
-
Put your Firebase service account file at
./secrets/firebase.json. -
Start the full stack.
docker compose up -d- Optional: follow logs.
docker compose logs -f payment-service wallet-service frontend- Open the app at http://localhost:4200.
Payment webhook endpoint:
http://localhost:5003/api/payment/webhook
Start Stripe forwarding:
.\stripe listen --forward-to http://localhost:5003/api/payment/webhookThen copy the printed whsec_... value into:
STRIPE_WEBHOOK_SECRETin.env
Rebuild payment service after env update:
docker compose up -d --build payment-serviceTest card:
4242 4242 4242 4242
Start all services:
docker compose up -dRebuild one service:
docker compose up -d --build payment-serviceShow logs:
docker compose logs -f payment-serviceStop everything:
docker compose downNever commit:
.envsecrets/firebase.json- any secret/token/key
This repository .gitignore already excludes secret files and local environment files.
If a secret was exposed:
- Rotate it immediately
- Remove it from Git history
- Force-push cleaned history if needed
Before your final push:
- Verify no secrets are staged
- Verify
.envandsecrets/are ignored - Ensure containers build and run
- Ensure Stripe webhook flow works (if payment demo is required)
- Commit with a clear message
Quick checks:
git status --short
docker compose psgit add .
git commit -m "chore: finalize project documentation and setup"
git pushUse feature/* and fix/* branches and open PRs with:
- clear summary
- test steps
- impact notes
If setup or Stripe forwarding fails, open an issue with:
- logs
- failing command
- service name