Project Overview
Health directory enabling geolocated search for medical facilities (hospitals, clinics, health centers) and practitioners (general practitioners, specialists, paramedical professionals) in France. The platform aggregates and structures official data from FINESS and CNAMTS databases to provide an optimal search experience.
Technical Architecture
Backend
- Framework: Django (MVT architecture)
- Database: SQLite for development, PostgreSQL for production
- ORM: Django ORM with versioned migrations
- REST API: Django REST Framework for autocomplete and AJAX endpoints
Frontend
- CSS Framework: Tailwind CSS via django-tailwind
- Interactivity: Vanilla JavaScript ES6+ (no JS framework)
- Progressive Enhancement: HTMX for dynamic interactions
- Templating: Django template system with inheritance
Infrastructure
- WSGI Server: Gunicorn
- Cache: Redis with django-redis for request caching
- Asynchronous Tasks: Celery with Celery Beat for automatic monthly data import
- File Storage: S3-compatible via django-storages and boto3
- Static Files: WhiteNoise with compression and caching
- Monitoring: Prometheus via django-prometheus for performance metrics
Data Models
FINESS Healthcare Facilities
- Complete integration of FINESS dataset (etalab_cs1100507)
- Normalized fields: FINESS identifiers, legal name, complete address, GPS coordinates, facility categories
- Automatic classification into 11 general categories (healthcare facilities, primary care structures, home hospitalization, mental health, etc.)
- Automatic cleaning and standardization of postal codes and city names
- Slug system for SEO-friendly URLs
- Optimized indexing for geographical searches
CNAMTS Practitioners
- Model based on CNAMTS documentation (ADELI data)
- Complete information: identity, profession, specialty, address, GPS coordinates
- Classification into 12 general categories (general practitioners, specialists, surgery, paramedics, etc.)
- Convention management (sector 1, sector 2, sector 3)
- Separate model for schedules (HorairePraticien) with day, time slot, consultation type management
- Uniqueness constraints to avoid duplicates
- Multi-field indexing for search performance
Main Features
Advanced Search
- Dual-mode search: Facilities or Practitioners with adaptive radio interface
- Smart autocomplete: Real-time REST API for location (cities, postal codes) with filtering based on selected type
- HTML5 Geolocation: Automatic position detection with reverse geocoding (BigDataCloud API) and complete error handling
- Category filters: 11 categories for facilities, 12 for practitioners
- Flexible geographic search: Support for various formats (postal code alone, city alone, postal code + city) with intelligent parsing
- Pagination: 20 results per page with optimized navigation
Results Pages
- Structured display with essential information (name, address, phone, category)
- SEO-friendly URLs with slugs for categories and locations
- Contextual breadcrumbs for navigation
- Displayed result statistics
- Proximity links to similar facilities/practitioners
Detail Pages
- Complete information for facility or practitioner
- Schedule display for practitioners (days, hours, consultation modalities)
- Integrated GPS coordinates for navigation
- Recommendation sections (nearby practitioners for facilities, nearby facilities for practitioners)
- JSON-LD structured data for SEO
Navigation Pages
- Category Guide: Complete documentation of 11 facility categories and 12 practitioner categories with detailed descriptions
- Popular Cities: Dynamic ranking of cities with the most facilities/practitioners
- Specialized Pages: Dedicated indexes for facilities and practitioners with simplified navigation
Integrated Blog
- Complete blog system with categories and tags
- Display of latest articles on homepage
- Article metadata (author, date, reading time, featured image)
- Excerpts and teasers for navigation
Interactive FAQ
- JavaScript accordion for Q&A
- JSON-LD FAQPage structured data for Google SEO
- 6 frequently asked questions with detailed answers
Advanced Technical Aspects
Performance and Caching
- Redis caching for frequent queries
- WhiteNoise with compression and cache headers for static files
- ORM query optimization with select_related and prefetch_related
- Strategic indexing of search fields
- Lazy loading and pagination for large lists
SEO and Accessibility
- Complete Open Graph and Twitter Cards metadata
- JSON-LD structured data (FAQPage, Organization)
- Semantic URLs and SEO-friendly slugs
- Automatic Django sitemaps
- HTML5 semantic tags
- Alt text for images
Security
- Native Django CSRF protection
- User input sanitization
- Configured security headers (HSTS, X-Frame-Options, etc.)
- Secure cookies in production (HttpOnly, Secure, SameSite)
- Server-side and client-side validation
Automation
- Periodic Celery Tasks:
- Automatic FINESS data import on the 11th of each month
- Automatic practitioner data import on the 10th of each month
- Daily content publication at 11 PM
- Error handling and structured logs with colorlog
- Automatic cleanup of obsolete files via django-cleanup
User Experience
- Responsive interface with Tailwind CSS (mobile-first)
- Smooth transitions and animations
- Immediate visual feedback (geolocation buttons with loading/success/error states)
- Complete keyboard navigation (arrows, Enter, Escape for autocomplete)
- Contextual and informative error messages
- Consistent design with differentiated color palette (blue for facilities, green for practitioners)
Deployment and Configuration
- Multi-environment configuration (development/production)
- Environment variables for secrets and configuration
- Windows and Linux support (automatic system detection)
- Versioned database migrations
- Static file collection and compression
- SSL/HTTPS configuration in production
Complete Technology Stack
- Django
- Django REST Framework
- Django Tailwind
- Gunicorn
- Celery
- Redis
- PostgreSQL / SQLite
- Boto3 / django-storages