Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# S3 Cloudflare
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET_NAME=

# Public access for S3 Cloudflare
CDN_BASE_URL=
VITE_CDN_BASE_URL=

# Initial admin credentials
DEFAULT_ADMIN_EMAIL=your@email.com
DEFAULT_ADMIN_PASSWORD=password

# Email sender (optional)
RESEND_API_KEY=

# Prod Database (optional)
POSTGRES_URL=

# 0Auth (optional)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CALLBACK_URL=http://yourdomain.com/api/auth/google/callback
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,4 @@ logs

/public/uploads/**
.env*
!.env.example
99 changes: 99 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Bloop - Documentation Projet

> DAW collaboratif web avec réseau social intégré.

## Stack technique

| Couche | Technologie |
|--------|-------------|
| Frontend | Vue 3 + Pinia + TypeScript + SCSS |
| Backend | Express.js + TypeORM + PostgreSQL |
| Storage | Cloudflare R2 (S3-compatible) |
| Cache audio | IndexedDB (500MB, LRU) |
| Auth | Session-based + Google OAuth |

## Structure

```
pie-poc-2/
├── webapp/ # Frontend Vue 3
│ └── src/
│ ├── components/app/ # DAW (voir CLAUDE.md)
│ ├── views/admin/ # Admin (voir CLAUDE.md)
│ └── stores/ # Pinia stores
├── server/ # Backend Express
│ └── src/
│ ├── config/entities/ # Entités TypeORM
│ └── routes/ # API REST
└── CLAUDE.md
```

## Documentation par module

| Module | Fichier | Description |
|--------|---------|-------------|
| DAW Timeline | `webapp/src/components/app/CLAUDE.md` | Piano roll, pistes, engines audio |
| Piano Roll | `webapp/src/components/app/timeline/PianoRoll/CLAUDE.md` | Éditeur de notes |
| Admin | `webapp/src/views/admin/CLAUDE.md` | Gestion users + samples |

## Commandes

```bash
# Dev (depuis racine)
npm run dev # Lance server + webapp

# Depuis /webapp
npm run dev # Vite dev server
npm run build # Build production
npm run lint # ESLint

# Depuis /server
npm run dev # Express avec nodemon
npm run build # TypeScript compile
```

## Variables d'environnement

```bash
# Auth Google
GOOGLE_CLIENT_ID=xxx
GOOGLE_CLIENT_SECRET=xxx
GOOGLE_CALLBACK_URL=http://localhost:3000/api/auth/google/callback

# Database
POSTGRES_DB=mydatabase
POSTGRES_PASSWORD=password
POSTGRES_USER=user

# Cloudflare R2
R2_ACCOUNT_ID=xxx
R2_ACCESS_KEY_ID=xxx
R2_SECRET_ACCESS_KEY=xxx
R2_BUCKET_NAME=bloop-samples
CDN_BASE_URL=https://samples.bloop-on.cloud
VITE_CDN_BASE_URL=https://samples.bloop-on.cloud

# Email
RESEND_API_KEY=xxx

# Admin initial
DEFAULT_ADMIN_EMAIL=xxx
DEFAULT_ADMIN_PASSWORD=xxx
```

## Conventions

- **Stores** : Pinia Composition API
- **Composants** : Vue 3 `<script setup>` + TypeScript
- **Audio** : Classes TypeScript pures (pas de dépendance Vue)
- **CSS** : SCSS scoped avec variables CSS (`--color-*`)
- **API** : REST avec réponses `{ status, message, body }`

## Domaines

| Env | URL |
|-----|-----|
| Dev | http://localhost:3000 |
| Staging | https://staging.bloop-on.cloud |
| Prod | https://bloop-on.cloud |
| CDN Samples | https://samples.bloop-on.cloud |
168 changes: 162 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,170 @@
# Bloop

DAW collaboratif web avec réseau social intégré.

## Stack

- **Frontend** : Vue 3 + Pinia + TypeScript + SCSS
- **Backend** : Express.js + TypeORM + PostgreSQL
- **Storage** : Cloudflare R2 (S3-compatible)
- **Cache audio** : IndexedDB (500MB, LRU)

## Installation

```bash
# Cloner le repo
git clone <repo-url>
cd pie-poc-2

# Installer les dépendances
npm install

# Configurer les variables d'environnement
cp .env.example .env
# Éditer .env avec vos valeurs

# Lancer en dev
npm run dev
```

## Variables d'environnement

Créer un fichier `.env` à la racine du projet :
Copier `.env.example` vers `.env` et remplir les valeurs :

```bash
cp .env.example .env
```

### Variables requises

```env
# Resend (emails transactionnels)
RESEND_API_KEY=re_xxxxx
# ================================
# Cloudflare R2 (stockage samples)
# ================================
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET_NAME=

# URL publique du bucket R2 (custom domain ou r2.dev)
CDN_BASE_URL=
VITE_CDN_BASE_URL=

# ================================
# Admin initial
# ================================
# Créé au premier lancement si n'existe pas
DEFAULT_ADMIN_EMAIL=your@email.com
DEFAULT_ADMIN_PASSWORD=password
```

### Variables optionnelles

```env
# ================================
# Email (Resend)
# ================================
RESEND_API_KEY=

# ================================
# PostgreSQL (prod uniquement)
# ================================
# En dev, SQLite est utilisé par défaut
POSTGRES_URL=

# ================================
# Google OAuth
# ================================
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CALLBACK_URL=http://localhost:3000/api/auth/google/callback
```

### Obtenir les credentials R2

# Google OAuth (optionnel - désactive le bouton si absent)
GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-xxxxx
1. Aller sur [Cloudflare Dashboard](https://dash.cloudflare.com)
2. Sélectionner votre compte > **R2 Object Storage**
3. **Account ID** : visible dans l'URL (`https://dash.cloudflare.com/{ACCOUNT_ID}/r2`)
4. **API Token** : Cliquer sur "Manage R2 API Tokens" > "Create API Token"
- Permissions : Object Read & Write
- Bucket : Sélectionner votre bucket ou "All buckets"
- Copier `Access Key ID` et `Secret Access Key`

### Configurer CORS sur R2

Dans le dashboard R2, bucket settings > CORS policy :

```json
[
{
"AllowedOrigins": [
"http://localhost:3000",
"https://bloop-on.cloud",
"https://staging.bloop-on.cloud"
],
"AllowedMethods": ["GET", "HEAD"],
"AllowedHeaders": ["*"],
"MaxAgeSeconds": 3600
}
]
```

## Commandes

```bash
# Dev (lance server + webapp)
npm run dev

# Build production
npm run build

# Lint
npm run lint
```

### Depuis /webapp

```bash
npm run dev # Vite dev server
npm run build # Build production
npm run preview # Preview build
```

### Depuis /server

```bash
npm run dev # Express avec nodemon
npm run build # Compile TypeScript
```

## Structure

```
pie-poc-2/
├── webapp/ # Frontend Vue 3
│ └── src/
│ ├── components/app/ # DAW Timeline
│ ├── views/ # Pages
│ └── stores/ # Pinia stores
├── server/ # Backend Express
│ └── src/
│ ├── config/entities/ # Entités TypeORM
│ └── routes/ # API REST
├── .env # Variables d'environnement
└── README.md
```

## Documentation technique

- [CLAUDE.md](./CLAUDE.md) - Vue d'ensemble technique
- [webapp/src/components/app/CLAUDE.md](./webapp/src/components/app/CLAUDE.md) - DAW Timeline
- [webapp/src/views/admin/CLAUDE.md](./webapp/src/views/admin/CLAUDE.md) - Interface Admin

## Environnements

| Env | URL |
|-----|-----|
| Dev | http://localhost:3000 |
| Staging | https://staging.bloop-on.cloud |
| Prod | https://bloop-on.cloud |
| CDN Samples | https://samples.bloop-on.cloud |
Loading