Personal Digital Asset Manager
Track the items, subscriptions, and digital assets you own.
English · 简体中文
Ownd is a self-hostable personal asset management system that brings together a mobile application, backend API, database, object storage, and automated delivery workflows in one repository. It manages physical items, subscriptions, and digital assets while preserving their history from purchase through retirement.
- Full asset lifecycle: Record purchases, usage, transfers, and retirement history.
- Analytics dashboard: Analyze total cost of ownership (TCO), average daily holding cost, and related metrics.
- Categories and platforms: Organize assets with custom categories and source platforms.
- Secure authentication: Manage sessions with JWT tokens and a Redis-backed blacklist.
- Cloud synchronization: Upload and back up images through MinIO object storage.
- Automated delivery: Deploy and release with Docker Compose and GitHub Actions.
| Layer | Technologies |
|---|---|
| Mobile app | Flutter 3.41 · Dart · Riverpod · Isar |
| Backend API | NestJS 11 · TypeScript · Prisma ORM |
| Data stores | PostgreSQL 16 · Redis 7 |
| Object storage | MinIO (S3-compatible) |
| Reverse proxy | Caddy 2 (automatic HTTPS) |
| CI/CD | GitHub Actions |
ownd/
├── .github/workflows/ # Automated deployment and release workflows
├── ownd-api/ # NestJS backend API
│ ├── src/ # Auth, items, categories, and other modules
│ ├── prisma/ # Database schema and migrations
│ ├── deploy/ # Caddy configuration
│ ├── docker-compose.yaml # Local supporting services
│ └── docker-compose.prod.yaml # Production orchestration
├── ownd-app/ # Flutter mobile application
│ ├── lib/ # Dart application code
│ ├── android/ # Android configuration
│ ├── ios/ # iOS configuration
│ └── config/ # Development and production configuration
└── README.md
git clone https://github.com/EF1874/ownd.git
cd owndInstall Node.js, pnpm, and Docker first.
cd ownd-api
pnpm install
cp .env.example .env.development
docker compose up -d
npx prisma migrate dev
npx prisma generate
pnpm run start:devInstall Flutter and the development tools for your target platform first.
For local network development, the backend generates ownd-app/config/local.json with the current computer's LAN address:
cd ownd-app
pnpm android:dev:installYou can also provide the API address manually:
cd ownd-app
flutter pub get
flutter run --dart-define=OWND_API_BASE_URL="http://localhost:3000/api/v1"To connect to the hosted API:
flutter run --dart-define=OWND_API_BASE_URL="https://api.ownd.cc/api/v1"| Workflow | Trigger | Purpose |
|---|---|---|
| Deploy Backend | Push changes under ownd-api/** to master |
Build and deploy the backend service |
| Release App | Change the version in ownd-app/pubspec.yaml |
Build an Android APK and create a GitHub Release |
| Update App Release Notes | Manual trigger | Update the text for an existing release |
Production releases built by GitHub Actions use encrypted secrets for Android signing. Local builds without production signing use debug signing for development and testing. Never commit signing files, passwords, or production environment variables.
- API:
https://api.ownd.cc
This project is licensed under the MIT License. Copyright © 2026 Cong Li.