﻿<p align="center">
  <img src="https://raw.githubusercontent.com/wiltark/veko.js/main/assets/logo.png" alt="Veko.js Logo" width="200"/>
</p>

<h1 align="center">Veko.js</h1>

<p align="center">
  <strong>Framework Node.js ultra-leger avec zero dependances - 4 types de pages, themes .jsv, SSR natif</strong>
</p>

<p align="center">
  <a href="https://www.npmjs.com/package/veko"><img src="https://img.shields.io/npm/v/veko.svg?style=flat-square" alt="npm version"></a>
  <a href="https://www.npmjs.com/package/veko"><img src="https://img.shields.io/npm/dm/veko.svg?style=flat-square" alt="npm downloads"></a>
  <a href="https://github.com/wiltark/veko.js/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="license"></a>
  <a href="https://github.com/wiltark/veko.js"><img src="https://img.shields.io/github/stars/wiltark/veko.js?style=flat-square" alt="github stars"></a>
</p>

<p align="center">
  <a href="#installation">Installation</a> -
  <a href="#demarrage-rapide">Demarrage</a> -
  <a href="#4-types-de-pages">4 Types de Pages</a> -
  <a href="#themes-jsv">Themes JSV</a> -
  <a href="#documentation">Documentation</a>
</p>

---

## Fonctionnalites

| Fonctionnalite | Description |
|----------------|-------------|
| **Zero Dependances** | Aucun package npm requis - Node.js pur |
| **4 Types de Pages** | ○ Static, ● SSG, ƒ Dynamic, ⚡ Ultra |
| **Themes JSV** | Templates .jsv avec heritage, boucles, conditions |
| **VSV Components** | Composants .jsv/.tsv avec JSX, SSR natif |
| **Tailwind CSS** | Moteur Tailwind integre, zero config |
| **SSR Natif** | Server-Side Rendering sans configuration |
| **Securite** | Headers securises, rate limiting, protection XSS |
| **CMS Ready** | Systeme de themes et modules pour CMS |

## Installation

```bash
npm install veko
```

C est tout. **Zero dependances** a installer.

Prerequis : Node.js >= 18.0.0

## 4 Types de Pages

Veko.js supporte 4 types de pages pour tous les cas d usage :

| Type | Symbole | Description | Cas d usage |
|------|---------|-------------|-------------|
| **Static** | ○ | Prerendu une seule fois | Pages fixes, CGU, FAQ |
| **SSG** | ● | Genere au build avec donnees | Blog, produits, docs |
| **Dynamic** | ƒ | Rendu serveur a chaque requete | Dashboard, admin |
| **Ultra** | ⚡ | Build a la demande, cache intelligent | Pages configurables |

```javascript
// Exemple de routing avec types
app.get('/', handler);              // ○ Static
app.get('/blog', ssgHandler);       // ● SSG
app.get('/admin', dynamicHandler);  // ƒ Dynamic
app.get('/settings', ultraHandler); // ⚡ Ultra
```

## Demarrage Rapide

### API Simple

```javascript
const { createApp } = require('veko');

const app = createApp({ port: 3000 });

app.get('/', (req, res) => {
  res.json({ message: 'Hello Veko!' });
});

app.post('/api/users', (req, res) => {
  res.status(201).json({ user: req.body });
});

app.listen();
```

## Themes JSV

Systeme de templates .jsv avec syntaxe Jinja-like :

### Syntaxe

```html
<!-- Variables -->
{{ title }}
{{ user.name | capitalize }}

<!-- Conditions -->
{% if user %}
  <p>Bienvenue {{ user.name }}</p>
{% else %}
  <a href="/login">Connexion</a>
{% endif %}

<!-- Boucles -->
{% for post in posts %}
  <article>
    <h2>{{ post.title }}</h2>
    <p>{{ post.content | truncate(100) }}</p>
  </article>
{% endfor %}

<!-- Heritage -->
{% extends 'layout' %}
{% block content %}
  Mon contenu ici
{% endblock %}

<!-- Inclusions -->
{% include 'partials/nav' %}
```

### Filtres disponibles

| Filtre | Description | Exemple |
|--------|-------------|---------|
| `upper` | Majuscules | `{{ name \| upper }}` |
| `lower` | Minuscules | `{{ name \| lower }}` |
| `capitalize` | Premiere lettre maj | `{{ name \| capitalize }}` |
| `truncate` | Tronquer | `{{ text \| truncate(100) }}` |
| `date` | Formater date | `{{ date \| date('long') }}` |
| `json` | JSON format | `{{ obj \| json }}` |
| `markdown` | Markdown to HTML | `{{ content \| markdown }}` |
| `default` | Valeur par defaut | `{{ name \| default('Anonyme') }}` |

### Structure des themes

```
themes/
+-- default/
|   +-- layout.jsv        # Layout principal
|   +-- partials/
|   |   +-- nav.jsv       # Navigation
|   +-- pages/
|   |   +-- home.jsv      # Page accueil
|   |   +-- blog.jsv      # Liste blog
|   |   +-- login.jsv     # Connexion
|   +-- admin/
|       +-- layout.jsv    # Layout admin
|       +-- dashboard.jsv
+-- modern/               # Theme alternatif
+-- dark/                 # Theme sombre
+-- minimal/              # Theme minimaliste
```

### Changer de theme

```javascript
const TemplateEngine = require('./engine/template');

const engine = new TemplateEngine({
  themesDir: './themes',
  theme: 'default'
});

// Changer de theme
engine.setTheme('modern');

// Lister les themes
console.log(engine.listThemes()); // ['default', 'modern', 'dark', 'minimal']
```

## CMS Demo

Un exemple complet de CMS avec themes et authentification :

```bash
cd examples/cms-demo
npm install
npm run setup   # Cree la base SQLite
node index.js   # http://localhost:3000
```

**Compte admin** : `admin` / `demo`

### Fonctionnalites du CMS

- 4 themes switchables (default, modern, dark, minimal)
- Authentification (login/register)
- CRUD articles avec SQLite
- Dashboard admin avec statistiques
- API REST complete

### Apercu des themes

| Theme | Style |
|-------|-------|
| **default** | Classique Tailwind, clair et professionnel |
| **modern** | Gradient purple/pink, glassmorphism |
| **dark** | Terminal/hacker style, vert sur noir |
| **minimal** | Typographie serif, ultra-minimaliste |

## VSV Components

### Directives Reactives

| Directive | Description | Exemple |
|-----------|-------------|---------|
| `$state` | Etat reactif | `const [val, setVal] = $state(0)` |
| `$computed` | Valeur derivee | `const double = $computed(() => val() * 2)` |
| `$effect` | Effets de bord | `$effect(() => console.log(val()))` |
| `$ref` | Reference DOM | `const el = $ref(null)` |
| `$memo` | Memoisation | `const cached = $memo(() => heavy())` |

## Structure du Projet

```
mon-projet/
+-- app.js                 # Point d entree
+-- package.json
+-- themes/                # Themes JSV
|   +-- default/
|   |   +-- layout.jsv
|   |   +-- pages/
|   |   +-- admin/
|   +-- modern/
|   +-- dark/
+-- components/            # Composants VSV
|   +-- Home.jsv
+-- public/                # Fichiers statiques
+-- db/                    # Base de donnees
+-- .veko/                 # Cache (auto)
```

## Securite

Securite integree par defaut, sans dependances :

- Headers securises automatiques (X-Content-Type-Options, X-Frame-Options, X-XSS-Protection)
- Rate limiting integre
- Body parsing securise avec erreurs 400
- Protection path traversal sur les fichiers statiques
- HTML escaping dans les pages d erreur

## Documentation

| Document | Description |
|----------|-------------|
| [Guide de Demarrage](docs/getting-started.md) | Installation et premier projet |
| [VSV Components](docs/vsv.md) | Composants, assets, Tailwind |
| [API Reference](docs/api.md) | Reference complete de l API |
| [Securite](docs/security.md) | Bonnes pratiques securite |
| [Plugins](docs/plugins.md) | Creer et utiliser des plugins |
| [Authentification](docs/auth.md) | JWT, sessions, auth patterns |

## Contribution

```bash
git clone https://github.com/wiltark/veko.js.git
cd veko.js
npm test
```

## Licence

MIT - Wiltark

---

<p align="center">
  Made with <3 by <a href="https://github.com/wiltark">Wiltark</a>
</p>
