mirror of
https://github.com/mblanke/Gov_Travel_App.git
synced 2026-03-01 14:10:22 -05:00
Build premium data portal with React + Tailwind CSS
Frontend Features: - Landing page with glassmorphism, animated counters, hero section - Interactive data tables with search, sort, filter, CSV export - Premium dark theme (navy + gold accents) - Framer Motion animations and micro-interactions - Responsive design with Inter + Playfair Display typography - DataTable component with pagination and live search Backend Updates: - New API endpoints: /api/rates/per-diem, /api/rates/accommodations, /api/stats - Database service methods for bulk data retrieval - Production mode serves built React app from /dist/client - Fallback to legacy HTML for development Tech Stack: - React 18 + TypeScript - Vite 7 build tool - Tailwind CSS 4 with @tailwindcss/postcss - Framer Motion for animations - Lucide React icons - SQLite3 backend Build Output: - 351KB optimized JavaScript bundle - 29KB CSS bundle - Fully tree-shaken and minified
This commit is contained in:
184
PORTAL_README.md
Normal file
184
PORTAL_README.md
Normal file
@@ -0,0 +1,184 @@
|
||||
# Premium Data Portal - Government Travel Rates
|
||||
|
||||
A modern, luxury data portal showcasing government travel rates with premium UX design.
|
||||
|
||||
## ✨ Features
|
||||
|
||||
### 🎨 Premium Design
|
||||
- **Glassmorphism Effects**: Translucent panels with backdrop blur
|
||||
- **Gradient Accents**: Deep navy + gold gradient theme
|
||||
- **Smooth Animations**: Framer Motion micro-interactions
|
||||
- **Typography**: Inter + Playfair Display pairing
|
||||
- **Dark Mode**: Premium dark theme with accent lighting
|
||||
|
||||
### 📊 Data Portal
|
||||
- **Interactive Tables**: Search, sort, filter, and export per-diem and accommodation rates
|
||||
- **Animated Counters**: Real-time statistics with smooth counting animations
|
||||
- **CSV Export**: One-click data export for analysis
|
||||
- **Pagination**: Smooth navigation through large datasets
|
||||
- **Responsive Design**: Works beautifully on all devices
|
||||
|
||||
### 🛫 Travel Integration
|
||||
- **OpenFlights Data**: Free, open-source flight data (6,072+ airports)
|
||||
- **Rate Coverage**: 233 countries, 9,114 per-diem entries, 1,356 accommodation rates
|
||||
- **Real-time Search**: Fast database queries with caching
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Development
|
||||
```bash
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Start backend server
|
||||
npm start
|
||||
|
||||
# Start frontend dev server (in another terminal)
|
||||
npm run dev:client
|
||||
```
|
||||
|
||||
Backend runs on `http://localhost:5001`
|
||||
Frontend runs on `http://localhost:3000`
|
||||
|
||||
### Production Build
|
||||
```bash
|
||||
# Build React frontend
|
||||
npm run build:client
|
||||
|
||||
# Start production server (serves built React app)
|
||||
NODE_ENV=production npm start
|
||||
```
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
### Frontend (`/client`)
|
||||
- **Framework**: React 18 with TypeScript
|
||||
- **Build Tool**: Vite 7
|
||||
- **Styling**: Tailwind CSS 4 with custom theme
|
||||
- **Animations**: Framer Motion
|
||||
- **Icons**: Lucide React
|
||||
- **UI Components**: Custom-built with Radix UI primitives
|
||||
|
||||
### Backend
|
||||
- **Server**: Node.js + Express
|
||||
- **Database**: SQLite3 with Better-SQLite3
|
||||
- **APIs**:
|
||||
- `/api/rates/per-diem` - All per-diem rates
|
||||
- `/api/rates/accommodations` - Canadian accommodation rates
|
||||
- `/api/stats` - Portal statistics
|
||||
- `/api/flights/search` - OpenFlights integration
|
||||
|
||||
### Key Files
|
||||
```
|
||||
├── client/
|
||||
│ ├── src/
|
||||
│ │ ├── App.tsx # Main application
|
||||
│ │ ├── pages/
|
||||
│ │ │ ├── LandingPage.tsx # Hero + animated counters
|
||||
│ │ │ └── DashboardPage.tsx # Data tables portal
|
||||
│ │ ├── components/
|
||||
│ │ │ └── DataTable.tsx # Interactive table component
|
||||
│ │ └── lib/
|
||||
│ │ └── utils.ts # Utilities (format, export)
|
||||
│ └── index.html # Entry point
|
||||
├── server.js # Express backend
|
||||
├── openFlightsService.js # Free flight data integration
|
||||
└── services/
|
||||
└── databaseService.js # Database layer
|
||||
```
|
||||
|
||||
## 🎨 Design System
|
||||
|
||||
### Colors
|
||||
- **Background**: Deep navy (#0B1120)
|
||||
- **Accent**: Gold gradient (#FACC15 → #EAB308)
|
||||
- **Glass**: rgba(255, 255, 255, 0.1) with 10px blur
|
||||
- **Text**: White (#FAFAFA) with gray-300 secondary
|
||||
|
||||
### Typography
|
||||
- **Headings**: Playfair Display (Display font)
|
||||
- **Body**: Inter (Sans-serif)
|
||||
- **Weights**: 300-900 range
|
||||
|
||||
### Spacing
|
||||
- **Container**: max-width 1200px, px-4 mobile
|
||||
- **Sections**: py-20 desktop, py-12 mobile
|
||||
- **Cards**: p-8 with rounded-2xl
|
||||
|
||||
## 📦 npm Scripts
|
||||
|
||||
| Script | Description |
|
||||
|--------|-------------|
|
||||
| `npm start` | Start production server |
|
||||
| `npm run dev` | Start backend with nodemon |
|
||||
| `npm run dev:client` | Start Vite dev server |
|
||||
| `npm run build:client` | Build React app for production |
|
||||
| `npm run preview` | Preview production build |
|
||||
| `npm test` | Run Jest tests |
|
||||
|
||||
## 🔧 Configuration
|
||||
|
||||
### Environment Variables (`.env`)
|
||||
```env
|
||||
PORT=5001
|
||||
NODE_ENV=production
|
||||
AMADEUS_API_KEY=your_key_here # Optional
|
||||
AMADEUS_API_SECRET=your_secret # Optional
|
||||
```
|
||||
|
||||
### Vite Configuration
|
||||
- Root: `./client`
|
||||
- Output: `../dist/client`
|
||||
- Proxy: `/api` → `http://localhost:5001`
|
||||
|
||||
## 📊 Data Sources
|
||||
|
||||
1. **NJC Travel Directive** - Canadian government per-diem rates
|
||||
2. **OpenFlights** - Free, open-source airport/airline/route data
|
||||
3. **Scraped Data** - Government accommodation rates (scraped via Python)
|
||||
|
||||
## 🚀 Deployment
|
||||
|
||||
### Docker
|
||||
```bash
|
||||
# Build image with React app
|
||||
docker build -t govt-travel-app:latest .
|
||||
|
||||
# Run container
|
||||
docker run -d -p 5001:5001 govt-travel-app:latest
|
||||
```
|
||||
|
||||
### Manual
|
||||
```bash
|
||||
# Build frontend
|
||||
npm run build:client
|
||||
|
||||
# Set production environment
|
||||
export NODE_ENV=production
|
||||
|
||||
# Start server
|
||||
npm start
|
||||
```
|
||||
|
||||
The server automatically serves the built React app when `NODE_ENV=production` and `/dist/client` exists.
|
||||
|
||||
## 🎯 Future Enhancements
|
||||
|
||||
- [ ] Interactive map view with country selection
|
||||
- [ ] Data visualizations with Recharts (rate comparisons)
|
||||
- [ ] Advanced filters (date ranges, rate thresholds)
|
||||
- [ ] User authentication and saved searches
|
||||
- [ ] Real-time Amadeus flight pricing integration
|
||||
- [ ] Mobile app (React Native)
|
||||
|
||||
## 📝 License
|
||||
|
||||
ISC
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
Built with premium attention to detail. Contributions welcome!
|
||||
|
||||
---
|
||||
|
||||
**Made with ✨ by the Government Travel Team**
|
||||
Reference in New Issue
Block a user