- Add detailed implementation plan (main-plan.md) - Add professional README with project overview - Include original specifications and screenshots - Document technology stack and architecture - Provide setup and deployment instructions
11 KiB
project.md — Sign-Language Video Dictionary + Sentence Builder (Znakovni-style)
Purpose
This file captures the observed functionality of the znakovni.hr web application (Croatian Sign Language portal) from the provided screenshots, so engineering agents can plan a comparable product.
full copy
- Replicate capabilities and branding. I need 1to1 copy of the app.
1) Product summary (what it is)
A web app that provides:
- A sign-language dictionary: browse and search words/terms and open an entry to view sign media.
- A sentence/document workspace (“Znakopis”): build a sentence by selecting terms from the dictionary, save it as a document.
- A video sentence player (“Video rečenica”): play a selected sentence/sequence as sign video; manage a sentence list and document pages.
- A cloud storage layer (“Oblak”): store/load documents, likely behind login.
- A support/community area: usage docs, community, comments, bug reporting.
From the screenshots, navigation is a left sidebar with core sections:
- Početna (Home)
- Riječi (Words / Dictionary)
- Znakopis (Sentence builder)
- Video rečenica (Video sentence)
- Oblak (Cloud)
A secondary “Portal za podršku” section appears in the sidebar:
- Korištenje aplikacije
- Zajednica
- Komentari
- Prijavi grešku
- External link: znakovni.org
Authentication UI shows Sign in when logged out and Sign out + username when logged in.
2) Screens (as observed)
2.1 Home (Početna)
Purpose: marketing/overview of capabilities. Observed content blocks:
- Large brand header and a tagline (“your path into sign language world”).
- Feature cards/tiles that preview:
- Dictionary browsing grid
- Sentence building (Znakopis)
- Video sentence playback
- Cloud/integrations-style illustration
Functional requirements:
- Static content page
- Links to primary features
2.2 Dictionary (Riječi)
This is the primary discovery/browsing screen.
Layout
- Top filter bar with:
- Text input: Riječ (word)
- Dropdown: Tip riječi (word type)
- Dropdown: CEFR razina (language level; example shows A2)
- Top-right action cluster includes:
- Button with magnifier: Traži (search/submit)
- Button: Text (likely toggles text-only vs icons/cards)
- Button: Reset (clear filters)
- Main area: grid of word cards.
Word card (observed)
Each card shows:
- A simple illustration/icon representing the word
- The word label in a colored bar (colors vary per word)
- Two actions:
- Dodaj (Add)
- Info (Details)
Interpretation of actions:
- Dodaj likely adds the word to the current sentence/document in Znakopis / Video sentence workflow.
- Info opens a details view/modal with sign media (video), description, examples, metadata.
Functional requirements:
- Server-side / API-backed query with filtering
- Pagination or infinite scroll (not visible, but grid implies many items)
- Two presentation modes (cards with icons vs text list) toggled by “Text”
- Deterministic sorting (likely alphabetic by default)
- Per-term details
2.3 Sentence Builder (Znakopis)
A workspace for assembling words into sentences and saving them as documents.
Observed elements (from screenshots)
- A page titled similar to “Znakopis — Rečenica detaljno” (Sentence details)
- A right-side panel that shows:
- Popis rečenica (Sentence list)
- Page indicator like 1 / 0 stranica (page count)
- Controls resembling pagination / page navigation
- Buttons/tabs at top: Znakopis and Oblak
- A prompt like “Učitajte dokument” (Upload/load document) when no document loaded
Assumed core behavior:
- Users create a document containing one or more sentences.
- A sentence is assembled from selected dictionary entries.
- The document can be saved locally and/or to cloud.
Functional requirements:
- Create new document
- Add/remove/reorder tokens (words) in a sentence
- Save document; load document; export/import (likely)
- Maintain versioned pages or “pages” within a document
2.4 Video Sentence (Video rečenica)
A video player view to play the sign sequence corresponding to the constructed sentence.
Observed layout
- Left: large video player area with playback controls under it.
- Controls include play/pause and additional buttons (likely speed, step, previous/next clip).
- Right: document area with:
- Popis rečenica (Sentence list) in a large text box region
- Tabs/buttons: Znakopis and Oblak
- Pagination controls on the right (page number, next/prev)
Functional requirements:
- Given a sentence token list, create a playlist of videos (one per token) and play sequentially.
- Controls:
- Play/pause
- Next/previous token
- (Recommended) speed control, loop, scrub/seek, fullscreen
- Sync player position with highlighted token in the sentence list.
2.5 Cloud (Oblak)
Based on UI labels, this is a storage layer for documents.
Functional requirements:
- List documents
- Load into Znakopis / Video sentence
- Save current document
- (Recommended) share via link, permissions, export
2.6 Authentication (Sign in)
Observed sign-in screen:
- “Sign in with your email address” (email-based login)
- “Sign in with your social account” with Microsoft and Google buttons
- “Sign up now” link
Functional requirements:
- Email + password or email magic link (choose one)
- OAuth for Microsoft and Google
- Account creation
- Session management
3) Core user flows
Flow A — Find a sign for a word
- Go to Riječi.
- Filter by word text / type / CEFR.
- Click Info on a card.
- View sign media (video), metadata, and examples.
Flow B — Build a sentence/document
- Go to Riječi.
- Click Dodaj on multiple cards.
- Switch to Znakopis.
- Reorder/remove tokens; optionally add punctuation.
- Save document (local/cloud).
Flow C — Play a sentence as sign video
- Build or load a sentence in Znakopis.
- Open Video rečenica.
- Press play to see signs for each token in sequence.
- Navigate pages/sentences.
Flow D — Cloud document management
- Sign in.
- Open Oblak.
- Create folders/tags (optional), load/save documents.
4) Data model (suggested)
4.1 Dictionary
Term
- id (uuid)
- word_text (string)
- normalized_text (string; for search)
- language (e.g., hr)
- word_type (enum; e.g., noun/verb/adj/phrase/etc.)
- cefr_level (enum: A1, A2, B1, B2, C1, C2)
- short_description (string, optional)
- tags (string[])
- icon_asset_id (nullable)
- created_at / updated_at
TermMedia
- id
- term_id
- kind (enum: video, image, illustration)
- url
- duration_ms (for video)
- width/height
- checksum
TermExample (optional)
- id
- term_id
- example_text
- notes
4.2 Documents / Znakopis
Document
- id
- owner_user_id (nullable if anonymous/local)
- title
- description
- visibility (private/shared/public)
- created_at / updated_at
DocumentPage
- id
- document_id
- page_index (int)
- title (optional)
Sentence
- id
- document_page_id
- sentence_index (int)
- raw_text (optional)
SentenceToken
- id
- sentence_id
- token_index (int)
- term_id (nullable if free-text)
- display_text
- punctuation (bool)
4.3 Community/support (optional)
- Comment/feedback
- Bug report
5) API surface (suggested)
Dictionary
GET /api/terms?query=&type=&cefr=&page=GET /api/terms/{id}GET /api/terms/{id}/media
Documents
POST /api/documents(create)GET /api/documents(list)GET /api/documents/{id}(full graph)PUT /api/documents/{id}(update metadata)PUT /api/documents/{id}/content(pages/sentences/tokens)POST /api/documents/{id}/share(optional)
Playback helpers
POST /api/playlists(sentence → resolved media playlist)- input: sentence_id or token list
- output: ordered list of video URLs + metadata
6) Playback logic (Video sentence)
Recommended playlist resolution algorithm:
- For each token, resolve
term_id. - Choose primary media of kind=video.
- Construct ordered playlist.
- Player features:
- preload next clip
- auto-advance on end
- handle missing media (skip with warning)
- optional: loop sentence
7) UX components (reusable)
- Sidebar navigation with auth state (sign in/out)
- FilterBar component (text + dropdowns + reset)
- WordCard / WordRow (card and text modes)
- InfoModal (term details + video)
- TokenTray (current sentence tokens)
- DocumentBrowser (cloud)
- VideoPlayer with playlist
- SentenceList with token highlighting and page controls
8) Authentication & security
- OAuth (Google, Microsoft) + email auth
- RBAC:
- anonymous: browse dictionary
- authenticated: save/load cloud docs, comment, bug report
- Store secrets in vault; rotate keys
- Rate limit search and auth endpoints
9) Storage & delivery
- Relational DB: PostgreSQL
- Media storage: S3-compatible (S3, R2, MinIO)
- CDN for video assets
- Transcoding pipeline (recommended): upload → transcode to H.264 MP4 + WebM + poster frame
10) Non-functional requirements
- Performance: search results < 300ms p95 for common queries
- Accessibility: keyboard nav, visible focus, ARIA labels, captions where possible
- Internationalization-ready (hr now; extendable)
- Observability: logs, metrics, tracing
11) MVP scope (if building “parity-first”)
MVP-1
- Dictionary grid with filters (query/type/CEFR)
- Term details modal with video
- Add-to-sentence (“Dodaj”) into a simple token tray
- Znakopis page: edit/reorder tokens; save locally (browser storage)
- Video sentence page: playlist playback
MVP-2
- Login (Google/Microsoft/email)
- Cloud documents (create/list/load/save)
- Multi-page documents + sentence list
MVP-3
- Comments/feedback + bug reporting
- Sharing and permissions
12) Open questions (for agents to resolve)
- Exact meaning of “Text” toggle on Riječi page (list mode? free-text search within cards?)
- Definition and taxonomy of “Tip riječi” values
- Whether CEFR is per-term or per-example usage
- Document model: pages vs sentences; how “1 / 0 stranica” should behave
- Whether “Oblak” is a separate page and a tab within editors (observed as a tab)
13) References to provided screenshots (for context)
From screenshots you provided, the following are clearly visible:
- Home page with feature previews
- Dictionary page with filter bar and grid of word cards + “Dodaj/Info” actions
- Video sentence page with large player + sentence list panel
- Znakopis/Sentence details page with document loading prompt
- Sign-in page with email + Microsoft/Google