diff --git a/README.md b/README.md index 21cf6bc..80cf31c 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,17 @@ -# Dusty Marble - RPNAB Invoicing Portal +# 🧾 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. +A single-page Rust web app for Rent & Petroleum Nordic AB, designed to streamline internal invoice processing and provide secure access for customers to view 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 primary goal is to increase operational efficiency by: -The application will include both a web UI and a command-line interface for administrative tasks. +- Enabling admin users to upload structured CSV transaction data +- Storing and linking those transactions to invoice records +- Allowing customers to log in and view/download invoice documents (HTML or PDF) +- Providing a command-line interface for admin-only tasks --- @@ -17,67 +19,67 @@ The application will include both a web UI and a command-line interface for admi ### Core Technologies -| Layer | Tool | Notes | -|---------------|------------------|--------------------------------------------| -| Frontend | [Leptos](https://github.com/leptos-rs/leptos) | Rust SPA framework with reactive UI | -| Backend | [Axum](https://github.com/tokio-rs/axum) | Lightweight async Rust web framework | -| Database | MariaDB + [`sqlx`](https://github.com/launchbadge/sqlx) | Compile-time checked queries | -| Migrations | [Goose](https://github.com/sifrr/goose) | Simple SQL-based migration tool | -| CLI Tooling | Rust + [`clap`](https://github.com/clap-rs/clap) | For admin-only workflows | -| CSV Parsing | [`csv`](https://docs.rs/csv/latest/csv/) | Robust parser with `serde` integration | -| PDF Generation| HTML + `wkhtmltopdf` or `weasyprint` | For generating styled invoice documents | -| Styling | Tailwind CSS (optional) | Utility-first styling | +| Layer | Tool | Description | +|---------------|------------------|-------------| +| Frontend | [Leptos](https://github.com/leptos-rs/leptos) | Rust-based SPA framework with SSR support | +| Backend | [Axum](https://github.com/tokio-rs/axum) | Async Rust web framework | +| Database | MariaDB + [`sqlx`](https://github.com/launchbadge/sqlx) | Compile-time verified SQL queries | +| Migrations | [Goose](https://github.com/sifrr/goose) | SQL migration runner | +| CSV Parsing | [`csv`](https://docs.rs/csv/latest/csv/) | High-performance CSV parser | +| CLI Tools | Rust + [`clap`](https://github.com/clap-rs/clap) | Command-line admin tasks | +| PDF Generation| HTML + `wkhtmltopdf` or `weasyprint` | Generate styled invoice documents | +| Styling | Tailwind CSS (optional) | Utility-first styling framework | --- -## πŸ—ΊοΈ Development Plan +## πŸ—ΊοΈ Development Roadmap ### Phase 1: Project Setup -- [x] Set up Git repository -- [ ] Initialize Cargo workspace -- [ ] Create initial `README.md` -- [ ] Set up Gitea repository +- [x] Create Git repository +- [ ] Initialize Rust workspace (`Cargo.toml`) +- [ ] Set up frontend, backend, CLI structure +- [x] Write project README -### Phase 2: Core Infrastructure -- [ ] Set up `frontend/` and `backend/` crates -- [ ] Configure `sqlx` and `Goose` for MariaDB -- [ ] Define initial DB schema -- [ ] Add `.env` for local secrets +### Phase 2: Infrastructure +- [ ] Add `.env` and config boilerplate +- [ ] Set up Goose migration framework +- [ ] Connect to MariaDB using `sqlx` +- [ ] Define initial DB schema (users, invoices, transactions) -### 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 3: Admin Functions +- [ ] Implement admin login (cookie-based) +- [ ] Create CLI tool for CSV uploads +- [ ] Parse CSV β†’ normalize β†’ store in DB +- [ ] Web UI to verify and review uploads ### Phase 4: Customer Portal -- [ ] Implement customer login system -- [ ] Create UI for listing invoices -- [ ] Render invoices as HTML -- [ ] Enable download of invoices as PDF +- [ ] Implement customer login +- [ ] Build UI to view invoice list +- [ ] Render invoice details +- [ ] Add option to download 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 +### Phase 5: Polish & Deploy +- [ ] Input validation + error handling +- [ ] Session persistence + CSRF protection +- [ ] Serve behind reverse proxy (Caddy) +- [ ] 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 +## πŸ“ Planned Project Structure ---- +```text +rpnab-invoicing/ +β”œβ”€β”€ frontend/ # Leptos SPA (Rust + WASM) +β”œβ”€β”€ backend/ # Axum HTTP API +β”œβ”€β”€ cli/ # Rust CLI binary for admin use +β”œβ”€β”€ shared/ # Common logic, models, parsing helpers +β”œβ”€β”€ migrations/ # Goose SQL migration scripts +β”œβ”€β”€ static/ # Public assets (PDF templates, CSS) +β”œβ”€β”€ .env # Local config (not checked in) +└── Cargo.toml # Workspace definition -## 🚧 Status +🚧 Project Status -> Project is in early planning and infrastructure phase. -> Active development begins Q4 2025. \ No newline at end of file +This project is in the planning and bootstrapping phase. +Initial development will begin in Q4 2025.