Skip to content

qibal/digital_marketplace

Repository files navigation


Aquilo
Aquilo

Secure Digital Product Marketplace Platform

Tests Backend Frontend Database

FeaturesTech StackQuick StartStructureAPITesting


About

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.

Key Selling Points

  • 🔒 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)

Features

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

Tech Stack

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

Quick Start

Prerequisites

Installation

# 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

Environment Variables

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"

Project Structure

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

API Routes

Base URL: http://localhost:3009/api/v2

📖 Full API docs: http://localhost:3009/docs (OpenAPI)

Core Endpoints

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

Content & Profile

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

Frontend Routes

Public Pages

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

Admin Panel (/admin/*)

Route Description
/users User management
/products Product moderation
/transactions All transactions
/reports Content reports
/settings Platform settings

Testing

# 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


Scripts

Command Description
bun run dev Start all services
bun run build Build for production
bun run test:coverage Run tests with coverage

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to branch (git push origin feature/amazing)
  5. Open a Pull Request

License

MIT License - see LICENSE for details


Made with ❤️ by Aquilo Team

Releases

No releases published

Packages

 
 
 

Contributors

Languages