A full-stack online ticketing app built with React + TypeScript (frontend) and Rust + Axum + SQLx (backend).
It supports ticket creation, record lookup, updates, and showing the latest 5 tickets.
Chinese version: README.md
- Create a ticket with name and reason
- Auto-generate serial numbers in the format
ADOYYYYMMDD-XXX - Reset sequence to
001every day - Show the latest 5 ticket records
- Search a ticket by serial number
- Update name and reason (also updates
updated_at)
- Frontend: React, TypeScript, Vite
- Backend: Rust, Axum, Tokio, SQLx
- Database: PostgreSQL
- Frontend default URL:
http://localhost:5173 - Backend default URL:
http://127.0.0.1:3000 - Frontend currently calls backend APIs via hardcoded URLs in code
- Node.js 20+ (LTS recommended)
- Rust 1.85+ (Edition 2024 support)
- PostgreSQL 14+ (or compatible versions)
git clone https://github.com/your-username/react-rust-ticketing-app.git
cd react-rust-ticketing-appCREATE DATABASE ticket_system;
\c ticket_system;
CREATE TABLE tickets (
id SERIAL PRIMARY KEY,
serial_no VARCHAR(20) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
reason TEXT NOT NULL,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL
);Set backend/.env:
DATABASE_URL=postgres://postgres:your_password@localhost:5432/ticket_systemcd backend
cargo runExpected output:
Connected to PostgreSQL successfully
server running on http://127.0.0.1:3000
cd frontend
npm install
npm run devOpen http://localhost:5173.
Base URL: http://127.0.0.1:3000
GET /api/health
Response:
OK
POST /api/ticketsContent-Type: application/json
Request:
{
"name": "Jeremy",
"reason": "Document submission"
}GET /api/tickets/recent
GET /api/tickets/:serial_no- Example:
GET /api/tickets/ADO20260316-001
PUT /api/tickets/:serial_noContent-Type: application/json
Request:
{
"name": "Jeremy Chu",
"reason": "Update reason"
}- Format:
ADOYYYYMMDD-XXX ADOis a fixed prefixYYYYMMDDis the backend local dateXXXis a zero-padded daily sequence starting from001- Sequence resets to
001when the date changes
Example: ADO20260316-001
react-rust-ticketing-app/
README.md
README.en.md
frontend/
src/
package.json
vite.config.ts
backend/
src/
main.rs
app_state.rs
handlers/
models/
routes/
utils/
Cargo.toml
Frontend (frontend/):
npm run dev: start dev servernpm run build: build production assetsnpm run lint: run ESLintnpm run preview: preview built assets
Backend (backend/):
cargo run: start backend servercargo check: fast compile/type checkcargo test: run tests (if available)
- Move frontend API URLs to environment variables
- Improve form validation and user-facing error messages
- Add migrations (for example,
sqlx migrate) - Add unit and integration tests
- Add Docker support
This project is mainly for learning and portfolio demonstration.