3ad22163af22a7e6dc6ff2a8dc1a1d075b655c98
Dusty Marble - RPNAB Invoicing Portal
This is a Rust-based single-page web application for Rent & Petroleum Nordic AB, designed to streamline internal operations and provide customers with access to their invoice documents.
🎯 Project Goal
The primary goal is to make invoicing more efficient by:
- Allowing internal users to upload structured transaction lists (CSV)
- Converting those transactions into a format suitable for invoice attachments
- Giving customers secure access to view/download their invoices
The application will include both a web UI and a command-line interface for administrative tasks.
🧰 Tech Stack
Core Technologies
| Layer | Tool | Notes |
|---|---|---|
| Frontend | Leptos | Rust SPA framework with reactive UI |
| Backend | Axum | Lightweight async Rust web framework |
| Database | MariaDB + sqlx |
Compile-time checked queries |
| Migrations | Goose | Simple SQL-based migration tool |
| CLI Tooling | Rust + clap |
For admin-only workflows |
| CSV Parsing | csv |
Robust parser with serde integration |
| PDF Generation | HTML + wkhtmltopdf or weasyprint |
For generating styled invoice documents |
| Styling | Tailwind CSS (optional) | Utility-first styling |
🗺️ Development Plan
Phase 1: Project Setup
- Set up Git repository
- Initialize Cargo workspace
- Create initial
README.md - Set up Gitea repository
Phase 2: Core Infrastructure
- Set up
frontend/andbackend/crates - Configure
sqlxandGoosefor MariaDB - Define initial DB schema
- Add
.envfor local secrets
Phase 3: Admin Interface
- Implement login system for internal user
- Create CLI for uploading CSV files
- Parse CSV and store transactions in DB
- Implement basic web UI for uploading and verifying CSV data
Phase 4: Customer Portal
- Implement customer login system
- Create UI for listing invoices
- Render invoices as HTML
- Enable download of invoices as PDF
Phase 5: Polish and Deployment
- Add basic access logging
- Add error handling and input validation
- Set up reverse proxy (e.g., Caddy) for HTTPS
- Package and deploy to FreeBSD jail
📁 Project Structure (planned)
rpnab-invoicing/
├── frontend/ # Leptos SPA
├── backend/ # Axum web API
├── cli/ # CSV import + admin commands
├── shared/ # Models, helpers, reused logic
├── migrations/ # Goose SQL migration files
├── static/ # Public files (PDF template, CSS)
├── .env # DB and secret configs (local only)
└── Cargo.toml
🚧 Status
Project is in early planning and infrastructure phase.
Active development begins Q4 2025.