Nova is a custom, open-source smart display designed to transform any old computer into a personalized smart hub.
- Frontend: React 18 + TypeScript with Vite
- Backend: Flask with Spotify OAuth integration
- Build: Multi-stage Docker build (Node.js → Python)
Terminal 1 - Backend :
./start-backend.shTerminal 2 - Frontend :
npm install # Si ce n'est pas déjà fait
npm run devTerminal 1 - Backend :
# Installer les dépendances Python si nécessaire
pip install -r requirements.txt
# Créer le fichier .env à partir de env.example
cp env.example .env
# Éditer .env et ajouter vos clés Spotify
# Démarrer le serveur Flask
python app.pyTerminal 2 - Frontend :
npm install
npm run devLe frontend sera accessible sur http://localhost:5173 et proxy les requêtes vers Flask sur http://localhost:5000.
npm install
npm run devThe dev server runs on http://localhost:5173 with proxies to the Flask backend at http://localhost:5000.
npm run buildThis generates the optimized React bundle in the dist/ folder, which Flask serves.
- Installer les dépendances Python :
pip install -r requirements.txt- Créer un fichier
.envà partir deenv.exampleet y ajouter vos clés Spotify :
cp env.example .env
# Éditer .env et ajouter vos clés- Démarrer le serveur Flask :
python app.pyLe serveur Flask sera accessible sur http://localhost:5000
- Dans un autre terminal, démarrer le frontend :
npm run devLe frontend sera accessible sur http://localhost:5173 et proxy les requêtes vers Flask.
Set these in your .env file:
SPOTIFY_CLIENT_ID: Your Spotify API client IDSPOTIFY_CLIENT_SECRET: Your Spotify API client secretFLASK_SECRET_KEY: Secret key for Flask sessions (optionnel en dev)SPOTIFY_REDIRECT_URI: OAuth redirect URI (par défaut: http://127.0.0.1:5000/callback)
docker-compose up --buildThis uses a multi-stage build:
- Node.js stage builds the React app
- Python stage copies the built files and runs Flask
.
├── src/ # React source code
│ ├── components/ # React components (Clock, Player, Settings, etc.)
│ ├── styles/ # Component CSS files
│ ├── utils/ # Utility functions (backgrounds, etc.)
│ ├── App.tsx # Main app component
│ ├── main.tsx # Entry point
│ ├── api.ts # API utilities
│ └── types.ts # TypeScript type definitions
├── public/ # Static assets (fonts, backgrounds, logo)
│ └── backgrounds/ # Background images
├── dist/ # Built React app (generated)
├── static/ # Legacy static files
├── app.py # Flask backend
├── start-backend.sh # Script de démarrage du backend
├── package.json # Node dependencies
├── tsconfig.json # TypeScript config
├── vite.config.ts # Vite bundler config
└── requirements.txt # Python dependencies
- Real-time Clock: Updates every minute
- Spotify Integration: Displays currently playing track with album art
- Customizable Backgrounds: Choose from multiple background images
- Weather Widget: Display current weather (to be implemented)
- Settings Panel: Glassmorphism design with multiple configuration options
- Responsive Design: Works on desktop and mobile devices
- OAuth Flow: Secure Spotify authentication
Le serveur Flask n'est pas démarré. Lancez ./start-backend.sh ou python app.py dans un terminal séparé.
- Vérifiez que vos clés Spotify sont correctes dans le fichier
.env - Vérifiez les logs du serveur Flask pour plus de détails
- Si le token est expiré, supprimez le fichier
.cacheet ré-authentifiez-vous
Vous devez vous authentifier avec Spotify. L'application vous redirigera automatiquement vers la page d'authentification Spotify.
