An interactive web application for mapping and connecting aviation education institutions, military bases with avionics technicians, and AEA (Aircraft Electronics Association) member shops across the United States.
- Interactive Map: Built with React-Leaflet, displaying all entities with custom color-coded markers
- CSV Upload: Bulk import data for schools, military bases, and AEA members
- Automatic Geocoding: Converts addresses to GPS coordinates using Nominatim API (OpenStreetMap)
- Advanced Filtering: Filter by entity type, school type, and search by name/location
- Detailed Information: Click markers to view contact details, websites, and facility-specific information
- Responsive Design: Works seamlessly on desktop and mobile devices
- Full-Stack Solution: React frontend with Node.js/Express backend and SQLite database
Interactive map showing schools, military bases, and AEA members
- React 18 with TypeScript
- Vite (build tool)
- React-Leaflet (interactive maps)
- PapaParse (CSV parsing)
- Tailwind CSS (styling)
- Axios (HTTP client)
- Node.js with Express
- TypeScript
- SQLite (database)
- Better-SQLite3 (database driver)
- Nominatim API (geocoding)
Avionics-Schools-Map/
├── frontend/ # React frontend application
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── services/ # API services
│ │ ├── types/ # TypeScript type definitions
│ │ ├── utils/ # Utility functions
│ │ └── App.tsx # Main application component
│ ├── public/ # Static assets
│ └── package.json
├── backend/ # Node.js backend API
│ ├── src/
│ │ ├── routes/ # API routes
│ │ ├── services/ # Business logic & services
│ │ ├── types/ # TypeScript type definitions
│ │ └── index.ts # Server entry point
│ ├── data/ # SQLite database storage
│ └── package.json
├── sample-data/ # Sample CSV files
│ ├── schools.csv
│ ├── military_bases.csv
│ └── aea_members.csv
└── .github/workflows/ # GitHub Actions for deployment
- Node.js 18+ and npm
- Git
-
Clone the repository
git clone https://github.com/yourusername/Avionics-Schools-Map.git cd Avionics-Schools-Map -
Install Backend Dependencies
cd backend npm install -
Install Frontend Dependencies
cd ../frontend npm install
-
Start the Backend Server
cd backend npm run devThe API will be available at
http://localhost:3001 -
Start the Frontend (in a new terminal)
cd frontend npm run devThe application will be available at
http://localhost:5173
-
Build the Backend
cd backend npm run build npm start -
Build the Frontend
cd frontend npm run build
Required columns:
name- School nametype- One of: "Part 147", "Technical College", "4-Year Program", "High School"address- Street addresscity- City namestate- State abbreviation (e.g., "CA", "TX")zipCode- ZIP code
Optional columns:
latitude- GPS latitude (auto-geocoded if not provided)longitude- GPS longitude (auto-geocoded if not provided)email- Contact emailphone- Contact phone numberpoc- Point of contact namewebsite- Website URL
Example:
name,type,address,city,state,zipCode,email,phone,poc,website
Spartan College,Part 147,8820 E Pine St,Tulsa,OK,74115,admissions@spartan.edu,918-836-6886,John Doe,https://www.spartan.eduRequired columns:
name- Base namebranch- One of: "Air Force", "Navy", "Army", "Marines", "Coast Guard", "Space Force"address- Street addresscity- City namestate- State abbreviationzipCode- ZIP code
Optional columns:
latitude- GPS latitudelongitude- GPS longitudeemail- Contact emailphone- Contact phone numberpoc- Point of contact namewebsite- Website URLreadinessCenterUrl- Family readiness center URLhasAvionicsTechs- "true" or "false"
Example:
name,branch,address,city,state,zipCode,email,phone,poc,website,readinessCenterUrl,hasAvionicsTechs
Tinker AFB,Air Force,7437 Arnold St,Oklahoma City,OK,73145,info@tinker.af.mil,405-739-2011,Col. Smith,https://www.tinker.af.mil,https://www.tinker.af.mil/readiness,trueRequired columns:
name- Company/shop nameshopType- One of: "Repair Station", "Airline", "OEM", "MRO", "Other"address- Street addresscity- City namestate- State abbreviationzipCode- ZIP code
Optional columns:
latitude- GPS latitudelongitude- GPS longitudeemail- Contact emailphone- Contact phone numberpoc- Point of contact namewebsite- Website URLcertifications- Certification numbers (e.g., CRS numbers)
Example:
name,shopType,address,city,state,zipCode,email,phone,poc,website,certifications
Duncan Aviation,MRO,3701 Aviation Rd,Lincoln,NE,68524,info@duncan.com,402-475-2611,Bob Duncan,https://duncan.com,CRS DKSR172DGET /api/schools- Get all schoolsGET /api/schools/:id- Get school by IDPOST /api/schools- Create a new schoolPUT /api/schools/:id- Update a schoolDELETE /api/schools/:id- Delete a schoolPOST /api/schools/bulk- Bulk import schools from CSV
GET /api/military- Get all military basesGET /api/military/:id- Get military base by IDPOST /api/military- Create a new military basePUT /api/military/:id- Update a military baseDELETE /api/military/:id- Delete a military basePOST /api/military/bulk- Bulk import military bases from CSV
GET /api/aea- Get all AEA membersGET /api/aea/:id- Get AEA member by IDPOST /api/aea- Create a new AEA memberPUT /api/aea/:id- Update an AEA memberDELETE /api/aea/:id- Delete an AEA memberPOST /api/aea/bulk- Bulk import AEA members from CSV
GET /api/health- Server health check
The frontend is configured to deploy to GitHub Pages automatically via GitHub Actions.
- Enable GitHub Pages in repository settings
- Set source to "GitHub Actions"
- Push to the
mainbranch or anyclaude/*branch - The workflow will build and deploy automatically
Note: For production use, you'll need to deploy the backend separately (see Backend Deployment below).
The backend can be deployed to various platforms:
- Create account at Railway
- Connect your GitHub repository
- Deploy the
backendfolder - Set environment variable
NODE_ENV=production
- Create account at Render
- Create a new Web Service
- Connect your repository
- Set build command:
cd backend && npm install && npm run build - Set start command:
cd backend && npm start
- Create account at DigitalOcean
- Create a new App
- Connect your GitHub repository
- Configure the backend as a service
After deploying the backend, update the frontend's VITE_API_URL environment variable to point to your backend URL.
VITE_API_URL=http://localhost:3001/api
For production, set to your deployed backend URL:
VITE_API_URL=https://your-backend-url.com/api
PORT=3001
NODE_ENV=development
-
Upload CSV Data
- Click "Upload CSV" button in the header
- Select data type (Schools, Military Bases, or AEA Members)
- Choose your CSV file
- Click "Upload CSV"
- The system will automatically geocode addresses if coordinates aren't provided
-
View Map
- Navigate the map by dragging
- Zoom in/out using mouse wheel or map controls
- Click markers to view detailed information
-
Filter Data
- Use the sidebar to filter by entity type
- Filter schools by type (Part 147, Technical College, etc.)
- Search by name, city, or state
-
View Details
- Click any marker to open a popup
- View contact information, address, and links
- Click email/phone to contact directly
- Click website links to visit official sites
- Purple - Part 147 Schools
- Blue - Technical Colleges
- Sky Blue - 4-Year Programs
- Cyan - High Schools
- Red - Military Bases
- Green - AEA Members
The application uses the Nominatim API (OpenStreetMap) for free geocoding. Please note:
- Rate limited to 1 request per second
- CSV uploads with many entries may take time to geocode
- You can pre-geocode your data and include latitude/longitude in CSV for faster imports
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
For issues, questions, or suggestions:
- Open an issue on GitHub
- Contact: [your-email@example.com]
- React-Leaflet for the mapping library
- OpenStreetMap for map tiles and geocoding
- Aircraft Electronics Association (AEA) for inspiration
- All contributors who help improve this project
- Add export functionality (download map data as CSV/JSON)
- Implement user authentication for data management
- Add clustering for dense marker areas
- Distance calculation between entities
- Advanced analytics and reporting
- Mobile app version
- Integration with AEA member database API
Made with ❤️ for the Aviation Community