BreizhVibe is my set of vibe-coding skills and tools for web development for associations, festivals, clubs and small businesses wavedevsimpl is my basic specification for quick and reliable app prototyping.
Methodology
- start simple with wavedevsimpl skill - keep track of modifications via code tracking tool, - keep history of prompts and detailed answers in md. Prompts name should follow rule : YMD-AIprovider-n.md
folder to upload by FTP. Changing host means copying it
1
SQLite file holds the whole database
What we’ve already built
Real tools, coded with Claude, each on the stack that suits it.
Youl Vat
Live
“Good will” in Breton.
Volunteer scheduling for festive events, first built for the Fest-noz Vras Kalanna in Quimper. The public reads the planning, volunteers sign up for a free slot, organisers run the whole day from it.
A mobile app for stock spread over several sites, warehouses and shops. Everything fits in one grid: products as rows, locations as columns, quantities where they meet.
Product × location grid with totals
Move stock between sites with a tap, or drag and drop
An admin interface for Supabase databases, free plan included: browse, filter and edit your tables, and back up your data. Essential when you code with AI.
Tables, filters and pagination
“Glass” theme, light and dark
Backup from the menu
Vanilla JavaScript, no runtime framework
Tailwind CSS compiled once, nothing to build in production
Case study: Youl Vat for the Fest-noz Vras Kalanna
Kalanna is the big New Year’s Eve fest-noz in Quimper: one night in the Pavillon of the Parc des Expositions, dancing from 8 pm to 4 am, with a bar and crêpes all night. It runs on volunteers, and Youl Vat was written to place them.
5
days to staff, from setting up on 29 December to clearing out on 2 January
24
stands and jobs: bar, crêpes, entrance, set-up…
56
shifts in the first planning, several of them past midnight
3
languages: brezhoneg, français, English
The volunteer rota used to live in a Google Sheet. Youl Vat replaces it with one address, youlvat.kalanna.bzh: anyone can read the planning on a phone, volunteers sign up for a free shift without creating an account, and the organisers run the whole event from the same screens, down to checking people in on the night.
It began as a prototype built in a conversation with Claude. The team liked the interface, so it stayed; only the data layer changed, ported to PHP and SQLite so the tool runs on any cheap shared host and moves by copying one folder. The code is open on GitHub.
How the data flows
In the browser
Planning, index.php: public, reloads the whole event every 15 seconds.
Sign-up, inscription.php: first name, name, phone and e-mail, no account.
Organisers: one shared password, then every screen becomes editable.
One door: api.php
GET action=all: the whole event in one JSON answer.
POST signup: public, with a CSRF token, a hidden trap field and 20 sign-ups an hour per device.
POST create · update · delete: organisers only, on a whitelist of tables and columns.
For the public a volunteer is “Marie D.”, phone and e-mail masked: full details never leave the server.
WAL journal, a 5-second wait, and the write lock taken first.
export.php: CSV for the spreadsheet, full JSON for backups or a change of host.
Two volunteers, one last place
Two people press “Sign up” for the last free place at the same second. The first request takes the write lock and inserts only if the shift still has room; the second waits a millisecond or two, finds it full and gets a clear answer instead of a double booking. The rule is written in the SQL itself, so no path through the PHP code can get around it.
Made for a night of fest-noz
A shift that starts before 6 am belongs to the night before: 00:00–05:00 on 31 December is New Year’s night.
Overlaps are flagged, and candidates are sorted by hours already planned, to share the load.
Check-in on the night: planned, present or absent.
Leads for each stand sign up on their own page.
A permanent link for every shift, stand and volunteer, to send by text message.
Vibe coding is fast, but left alone an AI happily reaches for frameworks, cloud services and build pipelines that break in three years. For web tools, the wavedevsimpl skill is the packaged set of instructions Claude follows on every project, so each app comes out the same simple, durable shape.
1
Describe the need
A festival’s volunteer rota, a stock list, a website to edit. Plain words, real constraints, who’s public and who’s admin.
2
Claude builds it
With the wavedevsimpl skill loaded: same layout, same libraries, same security rules, and decisions recorded in the project’s CLAUDE.md.
3
Test on a copy
Never on the real database. Public pages checked at 375 px wide, export working before go-live.
4
Upload one folder
FTP it to any shared PHP host. The database creates itself on first launch. Nothing to install.
PHP 8 + SQLite + vanilla HTML, CSS and JS
Boring on purpose. PHP runs on every cheap host, SQLite turns the database into a file, and no dependency means nothing to update.
PHP first, JavaScript second
Pages are rendered by PHP; JavaScript is only a small add-on for filtering, confirmations or a rich-text editor. One language to read, so the people who maintain the tool can open a file and understand it.
Cheapest possible hosting
Any shared PHP host. Nothing to install server-side.
Change host painlessly
The database is a file. Migrating is copying the folder.
Maintained for years
No npm install, no build that breaks. Fine for non-specialists.
No external service
No Firebase or Supabase quotas, paused free tiers or changing terms.
Rules every app follows
SQLite in WAL mode, foreign keys on, busy timeout set on every connection.
Zero-install schema: created on first run, migrated automatically when it changes.
Business rules where concurrency matters live in SQL, not in PHP.
One JSON API with whitelisted tables and columns; private fields stripped for visitors.
Shared admin password, CSRF token on every POST, everything escaped.
Mobile first, relative paths everywhere, and a CSV/JSON export before go-live.
When it’s the wrong tool
BreizhVibe says so honestly and proposes something else when a project needs: