# workshop.implementeer-ai.nl plan

## Status
V1 is a static prototype. It validates account access flow, subscription gate, session navigation, first chat interaction, and prototype video memory. It is not secure authentication and does not store real payment status.

## Current prototype rules
- Anyone can type a username and create a local demo account.
- `admin` is the only paid demo account.
- Non-paying users only see the Abonneer section.
- Paid users see the workshop chatroom with a previous-sessions sidebar and a right sidebar for recent videos.
- The chat starts with exactly one random productivity question.
- Short, spammy, joke-like, or off-topic input returns another productivity question.
- Serious answers receive a structured follow-up asking for frequency, input files, output format, and definition of done.
- Placeholder videos are only suggested after the bot has asked at least one clarifying follow-up.
- Video memory is account-level and consists only of offered, approved, and rejected videos.
- Video memory diagnostics are not shown to users; the visible UI shows recent videos instead.
- The chat composer includes icon-only controls for file selection and browser-based microphone transcript when supported.
- Selected files are not uploaded to a server; this static prototype stores only file metadata in the local chat session for later processing.

## Session model
- Sessions are stored client-side in localStorage for this prototype.
- Each session has id, title, createdAt, updatedAt, and messages.
- Sidebar rows show title, last update, and message count.
- New sessions start with one productive bot question.
- The static prototype does not persist anything server-side.

## Video memory model
- `offeredVideos`: every placeholder video shown to the user.
- `approvedVideos`: videos marked `Relevant`.
- `rejectedVideos`: videos marked `Niet relevant`.
- This video memory is the prototype's only long-term memory concept.
- Future bot suggestions should combine current chat context with previously approved/rejected/offered videos.
- The visible recent videos list is derived from offered videos and their relevant/not relevant feedback.
- The bot should not infer unrelated personal facts or retain arbitrary user details as memory.

## Next implementation phase
- Add real backend auth with server-side sessions.
- Add database tables for users, organizations, subscriptions, chat sessions, messages, media assets, and video feedback.
- Add payment/subscription status from a real source instead of client-side demo logic.
- Add an LLM harness with system rules, in-session memory, refusal/productivity routing, and admin-configurable safeguards.
- Add video database with title, keywords, transcript, file URL, thumbnail, topic, difficulty, and target workflow.
- Add retrieval so the bot can search videos from chat context and video memory.
- Enforce that the bot asks at least one clarifying question before recommending a video.
- Add real file upload, storage, virus scanning, retention rules, and processing after the safety and storage model is defined.
- Replace browser-only speech recognition with a reliable transcription service if microphone input becomes a core feature.

## Bot direction
The bot serves administrative employees who do not want to fall behind on AI. It should avoid empty "how can I help?" behavior. Every session should start with a concrete, useful question that points the user toward a workflow, file, task, or repeated administrative action.

## Future video recommendation rule
The bot may recommend a video only after it has enough context about:
- recurring task
- frequency
- input data or files
- desired output
- privacy or quality constraints
- relevant approved/rejected video history

## Open product questions
- What counts as a paid user: individual, team, company, or manually approved beta access?
- Should companies get their own workspace and shared process library?
- Which admin workflows are the first content priority: spreadsheets, email, CRM, invoicing, reporting, or planning?
- Should chat history be retained by default, or only during the active session?
- How much video feedback history should be used for recommendations?

## Testing required
After implementation:
- Validate HTML parse with Python HTMLParser.
- Confirm ASCII-only:
  LC_ALL=C rg -n '[^\x00-\x7F]' /srv/www/workshop.implementeer-ai.nl/index.html /srv/www/workshop.implementeer-ai.nl/plan.md || true
- Test local temp Nginx serving:
  / -> 200 text/html
  /plan.md -> 200 text/markdown
- Browser-flow checks:
  - initial screen shows login/register only.
  - empty username shows animated validation.
  - `jan` goes to Abonneer.
  - `admin` goes directly to chatroom.
  - first bot message appears via typing animation.
  - left sidebar shows sessions.
  - new session creates a new sidebar item.
  - selecting previous session loads it.
  - serious message triggers structured follow-up.
  - spam input triggers a productivity question.
  - placeholder video recommendation can be marked Relevant/Niet relevant.
  - video memory remains visible after reload for the same account.
- Do not edit Nginx config unless explicitly requested.
