Application web offline-first pour gérer vos visites immobilières personnelles.
- ✅ Offline-first : Fonctionne sans connexion internet
- ✅ Standalone Components : Architecture Angular moderne
- ✅ Tailwind CSS : Interface responsive et moderne
- ✅ IndexedDB : Stockage local persistant
- ✅ Auto-save : Sauvegarde automatique lors de la saisie
- ✅ Mobile-first : Optimisé pour mobile et tablette
- ✅ PWA Ready : Peut être installé comme application
- Node.js 20.19+ ou 22.12+
- npm 8.0+
- Installer les dépendances
cd visit-immobilier
npm install- Lancer le serveur de développement
npm startL'application sera accessible sur http://localhost:4200
- Build pour la production
npm run buildLes fichiers seront générés dans le dossier dist/
visit-immobilier/
├── src/
│ ├── app/
│ │ ├── models/
│ │ │ └── visit.model.ts # Interfaces TypeScript complètes
│ │ ├── services/
│ │ │ ├── storage.service.ts # Abstraction IndexedDB
│ │ │ └── visit.service.ts # Service CRUD des visites
│ │ ├── components/ # Composants UI réutilisables
│ │ │ ├── text-input/
│ │ │ ├── toggle/
│ │ │ ├── select/
│ │ │ ├── textarea/
│ │ │ └── section/
│ │ ├── pages/
│ │ │ ├── visit-list/ # Page liste des visites
│ │ │ └── visit-detail/ # Page détail d'une visite
│ │ ├── app.component.ts
│ │ ├── app.config.ts
│ │ └── app.routes.ts
│ ├── styles.css # Styles Tailwind
│ ├── index.html
│ └── main.ts
├── package.json
├── angular.json
├── tailwind.config.js
├── postcss.config.js
└── tsconfig.json
- Affichage en grille de toutes les visites
- Bouton "Nouvelle visite"
- Aperçu des informations principales (prix, surface, nombre de pièces)
- Photo principale
- Badge favori
- Navigation vers le détail
- Informations générales : type, prix, surface, pièces, état
- Localisation : adresse, ville, quartier, proximités
- Extérieur : balcon, terrasse, jardin, parking, orientation
- Parties communes : ascenseur, sécurité, état de l'immeuble
- Équipements : chauffage, charges, taxe foncière, fenêtres
- Notes : points forts/faibles, travaux, impression générale
- Photos : upload et gestion des photos
- Auto-save : Sauvegarde automatique après 1 seconde d'inactivité
- Validation : Formulaires réactifs avec validation
- Sections pliables : Interface organisée et épurée
- Export/Import : Possibilité d'exporter les données en JSON
- Recherche : Recherche par adresse, ville ou type
Les données sont structurées de manière logique et sérialisable :
Visit {
id: string
createdAt: Date
updatedAt: Date
general: GeneralInfo
location: Location
exterior: Exterior
commonAreas: CommonAreas
utilities: Utilities
windows: Windows
notes: Notes
photos: Photo[]
isFavorite: boolean
}Tous les champs sont typés et optionnels pour permettre une saisie progressive.
StorageService : Couche d'abstraction pour IndexedDB
save(): Sauvegarder un élémentgetById(): Récupérer par IDgetAll(): Récupérer tous les élémentsdelete(): Supprimer un élémentexportAll()/importAll(): Backup/Restore
VisitService : Logique métier des visites
createVisit(): Créer une nouvelle visitesaveVisit(): Sauvegarder une visitegetVisitById(): Récupérer une visitedeleteVisit(): Supprimer une visitetoggleFavorite(): Marquer/démarquer favoriaddPhoto()/deletePhoto(): Gestion des photos
- TextInputComponent : Champ texte ou numérique
- ToggleComponent : Bouton on/off (boolean)
- SelectComponent : Liste déroulante
- TextareaComponent : Zone de texte multiligne
- SectionComponent : Section pliable
Tous les composants implémentent ControlValueAccessor pour l'intégration avec ngModel.
Les données sont stockées localement dans IndexedDB :
- Base de données :
visit-immobilier-db - Object Store :
visits - Index :
by-date,by-favorite
Les données persistent même après fermeture du navigateur.
Le fichier tailwind.config.js permet de personnaliser :
- Couleurs
- Fonts
- Espacements
- Breakpoints
- Modifier l'interface dans
models/visit.model.ts - Mettre à jour la fonction de création par défaut
- Ajouter le champ dans le formulaire
visit-detail.component.ts
L'application est prête pour être installée comme PWA :
- Le fichier
manifest.jsonest configuré - Les meta tags sont en place dans
index.html - Pour activer complètement le mode PWA, ajouter un Service Worker
Cette architecture a été pensée pour faciliter la migration future :
- Modèles de données : Directement transposables en classes Dart
- Services : La séparation permet de remplacer facilement l'implémentation
- UI Components : Les composants peuvent être réimplémentés en Flutter Widgets
- Stockage : Remplacer IndexedDB par Hive, Isar ou SQLite
Pour ajouter des tests :
npm testL'application peut être déployée sur :
- Netlify
- Vercel
- GitHub Pages
- Firebase Hosting
npm run build
# Les fichiers sont dans dist/visit-immobilierFROM nginx:alpine
COPY dist/visit-immobilier /usr/share/nginx/html- Les données sont stockées uniquement en local
- Aucune connexion serveur n'est nécessaire
- Les photos sont encodées en Base64
- Taille maximale des photos : Dépend du navigateur (généralement ~10MB par photo)
- Nombre de visites : Limité par le quota IndexedDB du navigateur (généralement ~50% de l'espace disque disponible)
- Chrome 87+
- Firefox 78+
- Safari 14+
- Edge 88+
- Vérifier que le navigateur supporte IndexedDB
- Désactiver le mode navigation privée
- Vérifier les permissions du navigateur
- Vérifier la taille du fichier (< 10MB recommandé)
- Utiliser des formats standards (JPEG, PNG, WebP)
# Nettoyer et réinstaller
rm -rf node_modules package-lock.json
npm install
npm startCe projet est un MVP personnel. Pour l'étendre :
- Fork le projet
- Créer une branche (
git checkout -b feature/AmazingFeature) - Commit (
git commit -m 'Add some AmazingFeature') - Push (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
MIT License - Libre d'utilisation et de modification
Créé avec ❤️ pour gérer efficacement les visites immobilières
Bon courage pour vos visites ! 🏡