mirror of
https://github.com/mblanke/Gov_Travel_App.git
synced 2026-03-01 14:10:22 -05:00
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
69 lines
1.8 KiB
JSON
69 lines
1.8 KiB
JSON
{
|
|
"name": "govt-travel-estimator",
|
|
"version": "1.2.0",
|
|
"description": "Government Travel Cost Estimator Web Application",
|
|
"main": "server.js",
|
|
"scripts": {
|
|
"start": "node server.js",
|
|
"dev": "nodemon server.js",
|
|
"dev:client": "vite",
|
|
"build:client": "vite build",
|
|
"preview": "vite preview",
|
|
"test": "jest",
|
|
"test:watch": "jest --watch",
|
|
"test:coverage": "jest --coverage"
|
|
},
|
|
"keywords": [
|
|
"government",
|
|
"travel",
|
|
"cost-estimator",
|
|
"njc"
|
|
],
|
|
"author": "",
|
|
"license": "ISC",
|
|
"dependencies": {
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
"amadeus": "^11.0.0",
|
|
"axios": "^1.13.1",
|
|
"better-sqlite3": "^11.0.0",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"compression": "^1.7.4",
|
|
"cors": "^2.8.5",
|
|
"dotenv": "^17.2.3",
|
|
"express": "^4.18.2",
|
|
"express-rate-limit": "^7.1.5",
|
|
"framer-motion": "^12.26.2",
|
|
"helmet": "^7.1.0",
|
|
"joi": "^17.11.0",
|
|
"lucide-react": "^0.562.0",
|
|
"node-cache": "^5.1.2",
|
|
"react": "^19.2.3",
|
|
"react-dom": "^19.2.3",
|
|
"recharts": "^3.6.0",
|
|
"sqlite3": "^5.1.7",
|
|
"tailwind-merge": "^3.4.0",
|
|
"winston": "^3.11.0",
|
|
"winston-daily-rotate-file": "^4.7.1",
|
|
"xlsx": "^0.18.5"
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/postcss": "^4.1.18",
|
|
"@types/node": "^25.0.8",
|
|
"@types/react": "^19.2.8",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@vitejs/plugin-react": "^5.1.2",
|
|
"autoprefixer": "^10.4.23",
|
|
"jest": "^29.7.0",
|
|
"nodemon": "^3.0.2",
|
|
"postcss": "^8.5.6",
|
|
"supertest": "^6.3.3",
|
|
"tailwindcss": "^4.1.18",
|
|
"typescript": "^5.9.3",
|
|
"vite": "^7.3.1"
|
|
}
|
|
}
|