This file provides guidance to AI Coding Agents when working with code in this repository.
This is a Flask-based 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.
- ALWAYS activate the virtual environment before running ANY commands
- ALWAYS add a new-line at the end of files you edit
- Project uses
pre-commithooks for code quality checks
- app.py: Main Flask application with routing and data management
- Routes:
/(home),/nodes/(with optional area/node_id),/members/,/contact/,/api/data - Data loading: JSON files from
assets/data/directory (config.json, nodes.json, members.json) - Privacy filtering: Only displays items with
isPublic: true - Coverage calculation: Simple bounding box algorithm for geographic area estimation
- Templates: Jinja2 templates in
templates/directory with base.html inheritance - Styling: TailwindCSS with dark mode support, custom color scheme (primary: #10b981)
- JavaScript: Vanilla JS in
assets/js/app.jsfor data loading and client-side functionality - Alpine.js: Used for dark mode state management
- config.json: Site configuration, contact info, theme settings, feature flags
- nodes.json: Mesh network node data with locations, hardware specs, public keys
- members.json: Member profiles with avatars, bios, contact preferences
- Node privacy: Filter by
isPublicflag before display - URL routing: Short URLs like
/<area>/<node_id>redirect to full nodes page
# Development (watch mode)
npm run build-css
# Production (minified)
npm run build-css-prod# Install Python dependencies
pip install -r requirements.txt
# Run development server
python app.py
# Server runs on http://0.0.0.0:5000 with debug=True- app.py: Flask routes and data processing logic
- assets/data/: JSON data files (config, nodes, members)
- templates/base.html: Main template with meta tags, dark mode setup
- assets/js/app.js: Client-side data loading and JavaScript functionality
- tailwind.config.js: TailwindCSS configuration with custom colors and dark mode
- assets/css/input.css: TailwindCSS source file
- assets/css/output.css: Generated CSS (do not edit directly)
When updating data:
- Edit 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
- Static assets served from
assets/directory - Templates from
templates/directory - Supports both client-side and server-side data loading via
/api/dataendpoint - URL structure supports both full paths and short redirects for individual nodes