A citizen-powered platform for reporting and resolving local civic issues, fostering community engagement and government accountability.
- Real-time issue visualization on OpenStreetMap
- Cluster markers for high-density areas
- Custom map layers for different issue types
- Street view integration for context
| Feature | Description |
|---|---|
| Multi-step Form | Guided reporting process with progress indicators |
| Smart Categorization | Auto-suggestions for issue types based on description |
| Media Attachments | Support for images (JPG/PNG) and optional video clips |
| Anonymous Reporting | Option to submit without personal details |
graph TD
A[Search Interface] --> B(Keyword Search)
A --> C(Location Filter)
A --> D(Date Range)
B --> E(Full-text on titles/descriptions)
C --> F(Radius selector)
D --> G(Timeline visualization)
- Personal contribution metrics
- Issue resolution timelines
- Neighborhood heatmaps
- Achievement badges system
graph LR
React-->TypeScript
Vite-->React
Tailwind-->shadcn/ui
React-Leaflet-->MapComponents
GSAP-->Animations
Cloudinary-->ImagePersistence
| Package | Version | Purpose |
|---|---|---|
react |
^18.2 | Core framework |
leaflet |
^1.9.3 | Mapping engine |
react-leaflet |
^4.2.1 | React bindings |
nominatim-client |
^3.1.0 | Geocoding |
recharts |
^2.8 | Data visualization |
sonner |
^1.4.1 | Notification system |
- Node.js v18+ (LTS recommended)
- npm v9+ or yarn v1.22+
- 500MB disk space
- Modern browser with ES2020 support
# Clone with SSH
git clone git@github.com:your-org/jansahay.git
# Install dependencies (using yarn)
yarn install
# Configure environment
cp .env.example .env.local
# Start development server
yarn devEnvironment variables in .env.local:
VITE_MAP_TILE_LAYER=https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png
VITE_GEOCODING_ENDPOINT=https://nominatim.openstreetmap.org/search
VITE_MAX_REPORTS_PER_USER=50src/
βββ assets/ # Static assets
βββ components/ # Reusable components
β βββ map/ # Mapping components
β βββ ui/ # shadcn/ui overrides
β βββ ... # Other components
βββ hooks/ # Custom hooks
β βββ useGeolocation.ts
β βββ useLocalStorage.ts
βββ lib/ # Utilities
β βββ api/ # API clients
β βββ constants.ts # App constants
βββ pages/ # Route components
β βββ Dashboard/
β βββ MapView/
β βββ ...
βββ types/ # TypeScript types
βββ App.tsx # Root component
βββ main.tsx # Entry point
sequenceDiagram
User->>+Frontend: Submits report
Frontend->>+Nominatim: Geocode address
Nominatim-->>-Frontend: Returns coordinates
Frontend->>LocalStorage: Save report
Frontend->>Map: Display new marker
- Local reports:
localStoragepersistence - Map state: URL-encoded parameters
- UI state: React context
- Form state: React Hook Form
# Run linter
yarn lint
# Fix formatting
yarn format
# Build for production
yarn build
# Preview build
yarn preview# Run unit tests
yarn test:unit
# Run component tests
yarn test:components
# Generate coverage report
yarn test:coverage- Municipal API integration
- Bulk report import/export
- SMS notifications
- Crowdsourced verification
- LocalStorage has ~5MB limit
- No offline support yet
- Basic authentication only
We welcome contributions! Please see our Contribution Guidelines for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Commit your changes (
git commit -m 'Add some feature') - Push to the branch (
git push origin feature/your-feature) - Open a Pull Request
JanSahay is MIT licensed.
Project Maintainer: Your Name
Community Manager: Community Lead
Official Website: https://jansahay.app
Twitter: @JanSahayApp



