Caution
This repository is no longer actively maintained. All future development has moved to the new unified repository:
π MeshCore Hub
Please use MeshCore Hub for all new projects and contributions. This repository remains available for reference only.
A Flask-based community website for IPNet (Ipswich Mesh Network), a local MeshCore community group serving Ipswich, Suffolk, UK. The site displays mesh network nodes, member profiles, and provides community information with interactive maps and statistics.
- Interactive Node Map: Geographic display of mesh network nodes with detailed information
- Member Profiles: Community member directory with avatars and contact preferences
- Network Statistics: Real-time coverage area calculations and network metrics
- Dark Mode Support: User-configurable theme with persistent preferences
- Mobile Responsive: Optimized for all device sizes using TailwindCSS
- Privacy Controls: Configurable visibility for nodes and members
- app.py: Main Flask application with routing and data management
- Routes:
/(home),/nodes/(with optional area/node_id),/members/,/contact/,/api/data - Data Management: JSON files from
assets/data/directory with privacy filtering - WSGI Server: Gunicorn for production deployments
- Templates: Jinja2 templates with inheritance from
templates/base.html - Styling: TailwindCSS with custom color scheme and dark mode
- JavaScript: Vanilla JS for data loading and client-side functionality
- Alpine.js: Lightweight reactivity for UI state management
- config.json: Site configuration, contact info, theme settings
- nodes.json: Mesh network node data with locations, hardware specs, public keys
- members.json: Member profiles with avatars, bios, contact preferences
- Python 3.12+
- Node.js 20+ (LTS)
-
Clone the repository
git clone https://github.com/ipnet-mesh/website.git cd website -
Set up Python environment
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate pip install -r requirements.txt
-
Install Node.js dependencies
npm install
-
Build CSS assets
# Development (watch mode) npm run build-css # Or production build npm run build-css-prod
-
Run the Flask application
python app.py
The application will be available at http://localhost:5000
# Watch for changes and rebuild automatically
npm run build-css
# Build minified CSS for production
npm run build-css-prodEdit JSON files in assets/data/ directory:
- Use
isPublic: falseto hide sensitive nodes/members - Node IDs follow format:
{shortname}.{area}.ipnt.uk - Member avatars stored in
assets/images/avatars/ - Geographic coordinates required for coverage calculation
βββ app.py # Flask application
βββ requirements.txt # Python dependencies
βββ package.json # Node.js dependencies
βββ tailwind.config.js # TailwindCSS configuration
βββ assets/
β βββ css/
β β βββ input.css # TailwindCSS source
β β βββ output.css # Generated CSS (do not edit)
β βββ data/
β β βββ config.json # Site configuration
β β βββ nodes.json # Network nodes
β β βββ members.json # Community members
β βββ js/
β β βββ app.js # Client-side JavaScript
β βββ images/ # Static assets
βββ templates/
β βββ base.html # Base template
β βββ index.html # Homepage
β βββ nodes.html # Nodes page
β βββ members.html # Members page
β βββ contact.html # Contact page
βββ CLAUDE.md # Claude Code instructions
For traditional deployments:
# Install dependencies
pip install -r requirements.txt
npm install && npm run build-css-prod
# Run with Gunicorn
gunicorn --bind 0.0.0.0:5000 --workers 4 app:appGET /: Homepage with network statisticsGET /nodes/: All nodes pageGET /nodes/<area>/<node_id>: Individual node viewGET /members/: Members directoryGET /contact/: Contact informationGET /api/data: JSON API for all data
- Fork the repository
- Create a feature branch:
git checkout -b feature/new-feature - Make your changes and test locally
- Build CSS and test the application:
npm run build-css-prod && python app.py - Commit changes:
git commit -am 'Add new feature' - Push to branch:
git push origin feature/new-feature - Create a Pull Request
This project is open source and available under the GPL-3.0 License.