Aquilo
Secure Digital Product Marketplace Platform
Features •
Tech Stack •
Quick Start •
Structure •
API •
Testing
Aquilo is a secure marketplace for digital products — templates, courses, eBooks, music, and creative content. Built with modern technologies for speed, security, and developer experience.
🔒 Secure — Payment data handled by Xendit, never stored locally
🚀 Fast — Bun runtime + SolidJS for blazing performance
💳 Flexible — Guest checkout, multiple payment methods (VA, QRIS, Cards)
📱 Link-in-Bio — Each merchant gets a public profile page (/:username)
Feature
Description
Guest Checkout
Buy without creating an account
Split Payment
Automatic fee distribution via Xendit
Product Management
Upload, edit, publish digital products
Vouchers & Discounts
Create promo codes with limits
Reviews & Ratings
Verified purchase reviews
Link-in-Bio Profile
Public storefront for each merchant
Admin Dashboard
User, product, transaction management
Blog & FAQ
Content management for help articles
Layer
Technology
Runtime
Bun
Backend
Elysia.js
Frontend
SolidJS + Vite
Database
PostgreSQL + Prisma 7
Styling
TailwindCSS + Kobalte UI
Storage
Vercel Blob
Payment
Xendit
State
TanStack Query
# Clone repository
git clone https://github.com/your-org/aquilo.git
cd aquilo
# Install dependencies
bun install
# Setup environment
cp apps/elysia_backend/.env.example apps/elysia_backend/.env
cp apps/solid_frontend/.env.example apps/solid_frontend/.env
# Configure database
cd apps/elysia_backend
bunx prisma generate
bunx prisma db push
# Start development
cd ../..
bun run dev
Create .env files from examples:
cp apps/elysia_backend/.env.example apps/elysia_backend/.env
cp apps/solid_frontend/.env.example apps/solid_frontend/.env
Backend (apps/elysia_backend/.env)
Variable
Required
Description
DATABASE_URL
✅
PostgreSQL connection string
JWT_SECRET
✅
Secret key for JWT signing
XENDIT_SECRET_KEY
✅
Xendit API secret key
XENDIT_WEBHOOK_TOKEN
⚠️
Webhook verification token (production)
RESEND_API_KEY
⚠️
Resend email service API key
FRONTEND_URL
⚠️
Frontend URL for redirects (default: http://localhost:3000)
API_BASE_URL
⚠️
Backend public URL (default: http://localhost:3009)
NODE_ENV
⚠️
development or production
BLOB_READ_WRITE_TOKEN
✅
Vercel Blob storage token
# Required
DATABASE_URL = " postgresql://user:password@localhost:5432/aquilo"
JWT_SECRET = " your-super-secret-jwt-key-min-32-chars"
XENDIT_SECRET_KEY = " xnd_development_xxxx"
BLOB_READ_WRITE_TOKEN = " vercel_blob_xxxx"
# Optional (have defaults)
NODE_ENV = " development"
FRONTEND_URL = " http://localhost:3000"
API_BASE_URL = " http://localhost:3009"
# Production only
XENDIT_WEBHOOK_TOKEN = " your-webhook-verification-token"
RESEND_API_KEY = " re_xxxx"
Frontend (apps/solid_frontend/.env)
Variable
Required
Description
VITE_API_BASE_URL
✅
Backend API URL
VITE_API_BASE_URL = " http://localhost:3009/api/v2"
aquilo/
├── apps/
│ ├── elysia_backend/ # API Server (Port 3009)
│ │ ├── src/
│ │ │ ├── routing/ # Route definitions
│ │ │ ├── handler/ # Business logic
│ │ │ ├── repository/ # Database queries
│ │ │ ├── dto/ # Validation schemas
│ │ │ └── middleware/ # Auth, logging
│ │ ├── test/ # API tests
│ │ └── prisma/ # Database schema
│ │
│ └── solid_frontend/ # Web App (Port 3000)
│ ├── src/
│ │ ├── app/ # Route pages
│ │ ├── modules/ # Feature modules
│ │ └── shared/ # Components, services
│ └── public/ # Static assets
│
└── package.json # Workspace scripts
Base URL: http://localhost:3009/api/v2
📖 Full API docs : http://localhost:3009/docs (OpenAPI)
Module
Path
Description
Auth
/auth/*
Login, Register, OTP verification
Users
/users/*
Profile, Admin user management
Products
/products/*
CRUD, publish, analytics
Transactions
/transactions/*
Checkout, payment callbacks
Vouchers
/vouchers/*
Discount codes
Reviews
/reviews/*
Ratings, replies, moderation
Module
Path
Description
Links
/links/*
Link-in-Bio profiles & social links
Blog
/blog/*
Blog posts
Tutorials
/tutorials/*
Help tutorials
FAQ
/faqs/*
FAQ articles
Legal
/legal/*
Terms, Privacy policy
Route
Description
/
Landing page
/login, /register
Authentication
/blog, /blog/:slug
Blog articles
/faq
FAQ page
/tutorials/:slug
Tutorial content
/:username
Merchant public profile
/:username/product/:id
Product detail
/:username/checkout/:id
Checkout flow
Merchant Dashboard (/dashboard/*)
Route
Description
/links
Link-in-Bio profile settings
/shop
Product management
/vouchers
Discount codes
/transaction
Sales & orders
/analytics
Revenue analytics
Route
Description
/users
User management
/products
Product moderation
/transactions
All transactions
/reports
Content reports
/settings
Platform settings
# Run all API tests
cd apps/elysia_backend && bun test test/api
# Run with coverage report
cd apps/elysia_backend && bun test test/api --coverage
# From workspace root
bun run test:coverage
Current Status : ✅ 140/140 tests passing
Command
Description
bun run dev
Start all services
bun run build
Build for production
bun run test:coverage
Run tests with coverage
Fork the repository
Create your feature branch (git checkout -b feature/amazing)
Commit your changes (git commit -m 'Add amazing feature')
Push to branch (git push origin feature/amazing)
Open a Pull Request
MIT License - see LICENSE for details
Made with ❤️ by Aquilo Team