SkillHub — projekti viide
Olek: Faas 3 käimas — engagement elutsükkel, hinnamootor, Dokobit-allkirjastatud kahepoolsed platvormi NDA-d, engagement-vestlus + administraatori järelevalve, suunamisprogrammi pakkumismootor (€1/h × 90-päevane omistamine) ja Smart-ID + Mobiil-ID esmase-faktori sisselogimine identiteedi-väravaga kõik elus (v1.0.14). Vt §29 Teekaart ja ülesannete jälgija kogu faasipõhise loendi jaoks ja §28 eelmise seisundi snapshot-i jaoks. Viimati uuendatud: 2026-05-10 Eesmärk: Üks tõe allikas. Iga kõrvalekalle sellest dokumendist tuleb enne teostust selgesõnaliselt kokku leppida ja siia tagasi kanda. Investorile suunatud narratiiv: vt allpool sisukorra järel Kasutajateekonnad — asutaja narratiiv. See peatükk on äriplaani ja investorile esitletava deki alus; kõik ülejäänud peatükid on selle tehniline teostus.
Sisukord
- Kasutajateekonnad — asutaja narratiiv (investorile suunatud proosa; äriplaani alus)
- Identiteet
- Visioon ja lifti-pitch
- Turuanalüüs
- Konkurents
- Strateegiline positsioneerimine
- Kümme häirimisteljet
- Platvormi ulatus — mida me teeme ja mida mitte
- Ärimudel
- Dünaamiline hinnamootor
- Palgafond ja varahaldus
- Sertifitseerimissüsteem
- Koolitusäri
- Usaldus — arvustused, vaided, blokeerimised
- Kuus suletud automatiseeritud silmust
- AI-kiht
- Tehnoloogiavirn
- Arhitektuur ja repositooriumi paigutus
- Kasutajatüübid ja rollimaatriks
- Andmebaasi domeenid ja tabelid
- Andmebaasi konventsioonid
- Disainifilosoofia
- Disainimärgid ja esteetilised reeglid
- Turule mineku plaan
- KPI-d
- Riskid ja maandused
- Teekaardi faasid
- Sõnastik
- Teostuse seis
- Teekaart ja ülesannete jälgija
Kasutajateekonnad — asutaja narratiiv
See peatükk on asutaja-hääles läbikäik sellest, kuidas SkillHub teenib raha: automatiseerides tööjõurendi nendele klientidele, kes täna ostavad pärandlikest agentuuridest, ning makstes välja vahe töötaja netopalga (pärast makse ja kohustuslikke makseid) ja kliendile esitatava arve määra vahel. See on äriplaani ja investori-deki alus, ning iga teine selle dokumendi peatükk on nende kolme teekonna tehniline teostus.
Katvus inseneriteekaardi vastu on koondatud §29 Teekaart ja ülesannete jälgija osas; etappide UX-lepped on formaliseeritud inglise keelse
PROJECT_REFERENCE.md§31 osas (otsast-otsani sobitus- ja lepingustamisvoog).
A. Klient (tööandja / üüriv ettevõte)
Klient on ettevõte, kes vajab sertifitseeritud käsitsitööd massides ja kiiresti, kindlustundes, et tarnitavad inimesed on need, kelleks nad väidavad end olevat, ja oskavad seda, mida väidavad.
- Avastus. Klient saavutatakse tasulise reklaami kaudu — Meta, Google, YouTube ning valikuliselt välireklaam (reklaamtahvlid). Reklaam pitchib ühte konkreetset valu (sertifitseeritud, kohapealsed meeskonnad tundidega, läbipaistev hinnastamine) ja viitab
skillhub.ee-le ja SkillHubi äppidele App Store'is / Google Plays. - Sihtleht ja müügilehter. Pikk üheleheline (mobiili-esimene, veebi-peegeldatud) tutvustab platvormi võimekust ja kutsub korduvalt tegutsema.
- Registreerimine. CTA avab lühikese vormi: e-posti + telefoni kinnitamine, seejärel ümbersuunamine töölauale. Sealt suunatakse kasutaja ettevõtte profiili täitmisele (juriidiline nimi, registrikood, KMKR, arvelduse aadress, esindaja), mis on värav esimese tööbriifi avaldamisele.
- Kaks võimalust tööbriifi koostamiseks.
a. AI Tööjõu Arhitekt — vestlevas chatis pärib ja eraldab struktureeritud
shift_request-i loomulikust keelest. Kasutaja vaatab eraldatud tulemuse üle enne avaldamist. b. Tavavorm — selgesõnalised väljad ametile, asukohale, ajakavale, sertifitseeringutele, töötajate arvule, määrale, tööriistadele, isikukaitsevahenditele, hierarhiale. - Sobituse tulemused. a. Kandidaadid leiduvad. Loend kuvab pingerea kandidaate koos AI sobituseprotsendiga, kuid kõik isikuandmed on hägustatud ja luku-ikooniga märgistatud (nimi, foto, e-post, telefon, täpne aadress). Klient saab avada CV-stiilis profiili, lugeda AI verdikti ja kutsuda üht või mitut töötajat. Edukuse-dialoog kinnitab saatmise ja kasutaja suunatakse jaotisesse Töötajad → Kutsed (Ootel), grupeeritud projektide kaupa, filtreeritav staatuse järgi. b. Veel ei ole kandidaate. Tellimus jääb aktiivseks. Iga uus pardalevõetud töötaja hinnatakse Etapi 1 (algoritmiline taastamine) poolt kõikide avatud tellimuste vastu uuesti; läbinud sobitused tõstetakse Etappi 2 (AI-skoor) ja tabamuse korral saab klient push-, e-posti- ja äpisisese teavituse uuest kandidaadist.
- Töötaja võtab vastu. Klient saab kõikides kanalites teavitused, töötaja liigub Ootel-ist Vastuvõetud kutsetesse. Töötaja profiili avamine käivitab nüüd Platvormi NDA voo: leping renderdatakse täielikult lehel, kasutaja peab kerima lõpuni, et üldse saaks allkirjastada, allkirjastamata PDF on ülevalt allalaaditav, ja lõpus käivitatakse Smart-ID / Mobiil-ID / Dokobit allkirjastamise sessioon. Edu korral satub kasutaja kinnituslehele koos kahepoolse allkirjastatud ASiC-E allalaadimisega ja nupuga „Valmis", mis avab töötaja profiili koos kõigi avatud isikuandmetega.
- Vestlus. Töötaja ja klient saavad nüüd üksteisele sõnumeid saata. Vestluseid jälgib AI, et avastada katsed SkillHubi ümber minna (platvormi-välised lepingud, kõrvalmaksed). Järelevalve on Platvormi NDA-s avalikustatud, ja esimesel vestluse avamisel kuvatakse GDPR Art. 13 teavitus (eesmärk, säilitusperiood, õiguslik alus, Art. 17 kustutamise kanal) — vt §D.4.
- Prooviantud nädal. Mõlemad pooled allkirjastavad ühenädalase eellepingu (projektipõhine, SkillHub on tööandja-rollis). Kestus on soovi korral läbiräägitav — kumbki pool võib enne allkirjastamist paluda admini eellepingu pikkust pikendada või lühendada (§D.2). Töötaja logib tunde äpis geo-piiratud kella sissepanekuga; klient märgib eelnevalt tööobjekti ja lubatud raadiuse.
- Kinnitus ja väljamakse. Klient kinnitab töötaja päevased tunnid; kinnituse järel saab töötaja taotleda väljamakset ja SkillHub maksab palgafondist 24 h jooksul, esitades kliendile arve standardtingimustel.
- Hinnang ja vaie. Lepingu ajal ja lõpus jätab klient 1–5 tärni hinnangu + kommentaari. Töötaja saab esitada vaide; SkillHubi vaiete-nõukogu lahendab. Avaldatud lävendid (keskmine ≤ 2,5 viimase 10 lepingu üle → 14-päevane peatamine; kolmas peatamine → alaline blokeering — §13) on hinnangu-ajaloos otse näha, nii et „õiglus" tugineb reeglile, mitte kaalutlusele. Tsükkel algab uuesti.
B. Töötaja
Töötaja on tüüpiliselt käsitsitöö professionaal, kellel on vaja kiiresti tööd ja vähe kannatust pikkade vormide jaoks.
- Avastus. Standardkanalid (Meta, Google, YouTube, välireklaam) pluss suunamisprogramm, mis on ehitatud peamiseks pakkumismootoriks:
„Inimene registreerub SkillHubis ja saab suunamislingi. Kui tema poolt suunatud sõber registreerub selle lingi kaudu (veeb või Android / iOS äpp) ja täidab oma profiili, siis järgmise 3 kuu jooksul iga kord, kui SkillHubi klient palkab selle töötaja, teenib suunaja €1 iga kinnitatud töötunni eest." Suunamispreemia rahastatakse platvormi marginaalist, mitte lahutatakse suunatud töötaja palgast (vt allpool Vastuväited).
- Kiire registreerimine. Profiilipilt, linn, töötamise raadius, põhikontakt. Kasutaja saab kohe töölaua ligipääsu.
- Profiili värav. Kodulehe teavitus teatab, et erialaprofiile ei saa avaldada enne, kui isikuprofiil on 100% täidetud. Kasutaja juhitakse seda lõpetama.
- Kaks võimalust ameti lisamiseks. a. AI vestlusrobot — loomuliku-keele vestlus, mis CV välja parsib; kasutaja vaatab eraldatud andmed üle, lisab tõendavaid pilte / sertifikaate ja avaldab. b. Tavavorm — käsitsi täitmine neile, kes seda eelistavad. Avaldatud ametid kuvatakse loendis koos redigeerimise / kustutamise tegevustega.
- Kutse saabunud. Push-, e-posti- ja äpisisene teavitus. Kutset puudutades käivitatakse töötaja-poolne Platvormi NDA (lehel lugemine, lõpuni kerimine, Smart-ID / Mobiil-ID / Dokobit allkiri, ASiC-E allalaadimine). Edu korral satub töötaja projekti briifile, kus kõik varem peidetud kliendi-andmed on nüüd nähtavad (juriidiline isik, registrikood, projekti aadress, kontakt). Töötaja saab firmat veebis uurida ja alustada vestlust tööandjaga.
- Eelleping. Teine allkirjastamise voog — projektipõhine ühenädalane eelleping SkillHubiga (vaikimisi; soovi korral läbiräägitav, vt §D.2). Sama Dokobit allkirjastamise rada.
- Objektil. Töötaja ilmub kokkulepitud asukohta ja käivitab äpis ajaarvesti (start / stopp). Klient peab olema loonud projekti / alamülesande ja määranud geopiiri.
- Kinnitus ja väljamakse. Iga tööpäeva järel arutab töötaja vestluses tundide kinnitamise. Kinnitamise järel taotleb töötaja väljamakse ja saab 24 h jooksul raha pangakontole.
- Avalik hinnang. Töötaja saab jätta avaliku 1–5 tärni hinnangu + kommentaari ettevõttele; see on nähtav kõikidele tulevastele töötajatele, kes vaatavad selle ettevõtte profiili. Ettevõte saab samasse nõukogusse vaide esitada. See radikaalse-läbipaistvuse hoiak on platvormi tuumikne usaldusmehhanism.
- SkillHub Verifitseeritud + ⭐ tase. Kodulehe promo kutsub töötajat Verifitseeritud märgi taotlemiseks. Voog on lukustatud (i) 100% täidetud profiili ja (ii) autenditud isiku (Smart-ID / Mobiil-ID / ID-kaart) tagant. Taotluse järel võtab SkillHubi tiim töötajaga ühendust e-posti, push-i ja äpisisese sõnumi kaudu, et leppida kokku kontorisse tuleku aeg: dokumendid digitaliseeritakse, ametid testitakse kohapeal, edu korral märgitakse töötaja kõikides kanalites verifitseerituks. Töötajat saab verifitseerida ainult nende ametite jaoks, mis ta on juba avaldanud, sest verifitseerija valmistub vastavalt. Märk pluss ⭐1–⭐5 sertifitseerimisredel voolavad otse §9 / EN §31.16 hinnamootorisse — kõrgem tase ja verifitseeritud staatus tõstavad proportsionaalselt töötaja brutomäära ja platvormi arvelduse — ning AI-sobitamise skoori, mis on klientidele nähtav.
C. SkillHubi admin
Veebi-esimene, sest töö toimub suurel ekraanil, mobiili pariteediga reisidel.
Admin logib sisse töölaua avalehele, mis võtab kokku iga võtmeplatvormi seisu reaalajas; klõpsamisel avaneb detailvaade.
- Kasutajad. Filtreeritav rolli (admin, töötaja, tööandja, …), loomise kuupäeva, esimese rolli järgi. Reaview näitab vaid hädavajalikku; klõps avab kasutaja profiili kahe vahekaardiga (Ettevõte / Isiklik), mis peegeldavad töötaja- ja tööandja-poole profiili-ekraane 1:1, vaikimisi loe-ainult režiimis, koos Muuda tegevusega, mis aktiveerib samad sisendid, mida kasutaja näeb. Mobiil peegeldab töötaja / tööandja paigutust; veebi pool on poleeritud SkillHubi disain, sisendi-stiil sisselogimise lehe sarnane.
- Verifikatsioonid. Kolm vaadet: Verifitseeritud infolehe külastajad, avatud verifitseerimistaotlused ja administraatori pipeline. Tööriistad: sertifikaadi üleslaadimine, sisesed märkmed, etapi / kanban-üleminekud kontoritiimi vahel ja vaide-vestlus töötajaga.
- Hinnangud. Ühtne loend kõigist töötaja→kliendi ja kliendi→töötaja arvustustest. Iga osaleja avab kogu ajaloo. Lehel asub ka vaiete-nõukogu tööriistakast: sildistamine, kommentaarid, osakondade vahel suunamine, otsuse salvestamine.
- Ametid ja tööd. Vahekaardid avaldatud töötaja erialade ja tööandja tellimuste ülevaateks / filtreerimiseks / modereerimiseks, sealhulgas blokeerimise tegevus võltspostituste jaoks.
- Sobitused. Operatsiooniliselt kõige kriitilisem ekraan. Loetleb iga kliendi-kutse, iga töötaja-vastuse, NDA staatuse ja vestluse sisu (vastavus ümbermineku-katsetele). Toob esile, kes on eellepingu allkirjastanud ja kes mitte. SkillHubi allkiri lisatakse serveripoolselt; mõlemad pooled allkirjastavad Smart-ID / Mobiil-ID / ID-kaardiga; admin saab alla laadida ASiC-E faili.
- Lepingud. Ajaloolised ja praegu aktiivsed lepingud, otsitavad ja eksporditavad.
D. Lukustatud otsused (asutaja resolutsioonid, 2026-05-09)
Allolevad vastuväited toodi asutaja ette otsustamiseks; otsused on v1 jaoks siduvad ja siia salvestatud, et narratiiv, kood ja lepingu-mallid jääksid kooskõlla.
- Suunamise rahastamise allikas — rahastatud platvormi marginaalist. €1/h × 3-kuuline preemia makstakse SkillHubi vahest, ei lahutata kunagi suunatud töötaja palgast. SkillHubile majanduslikult neutraalne (haarame juba vahe) ja tööõiguslikult puhas (NL / DE / FR / PL miinimumpalga / kollektiivlepingu riskid puuduvad).
- Eellepingu pikkus — lame üks nädal, soovi korral läbiräägitav. Vaikimisi eelleping on üks nädal. Eelleping on kahe ettevõtte (SkillHub OÜ tööandja-rollis + klient) ja töötaja vahel käsunduslepinguga (EE TLS), mistõttu pooled võivad eellepingu kestust lepinguliselt määrata, mitte töölepingu seaduse alusel. Nii klient kui töötaja võib taotleda erinevat kestust iga konkreetse lepingu kohta; admin kinnitab ja SkillHubi-poolne mall kohandab kestuse-välja. Riigipõhised mallid NL WAADI, DE AÜG, FR ajutise-töö ja PL APT jaoks lisanduvad nende riikide käivitamise slice'idesse, mitte siia.
- Verifitseerimise skaleerimine — algul majas, hiljem partnerid. Eesti käivitamine verifitseerib töötajaid SkillHubi kontoris kohapeal (see on brändi eristaja). Kui avame riigid 2..N, laiendavad partnerkoolid ja mobiil-verifitseerijad sama protokolli; senikaua on bottleneck tahtlik ja võimekusele vastav. EN §31.14 admini pipeline toetab juba mõlemat režiimi.
- AI-jälgitud vestlus — disainilt GDPR-vastavalt. Platvormi NDA avalikustab AI-järelevalve selgesõnaliselt (ümbermineku-tuvastus + tavateksti säilitamine vastavusülevaateks). Esimesel vestluse avamisel näeb kasutaja GDPR Art. 13 banneri — eesmärk, säilitusperiood, õiguslik alus (õigustatud huvi + lepingu täitmine), Art. 17 kustutamise kanal mitte-tõenduslike fragmentide jaoks. Kinnitus logitakse. Avalikustamine peab eelnema igale sõnumi salvestamisele.
- Isiku-avalikustamine — rolli-põhine, mitte kahepoolne. Vastaspoole isikuandmed avanevad hetkel, mil kutsuja ise on allkirjastanud oma kahepoolse Platvormi NDA SkillHubiga. Sellel hetkel on kutsuja lepinguliselt seotud konfidentsiaalsusega ja SkillHub on kaitstud; teine pool jääb oma vaates anonüümseks, kuni allkirjastab oma NDA. See asendab varasemat „oodake mõlemat" lukku; kihiengaažmendi olekumasin liigub endiselt mõlemast
accepted_pending_*_platform_ndaolekust läbi (st eellepingu faas nõuab endiselt mõlemat NDA-d), kuid isikuandmete vaate lukk on rolli-põhiselt eraldatud (apps/web/server/utils/engagementDetail.ts → computeIdentityUnlocked). - Peatamise lävendid — toodud kasutaja-pinnale. §13 invariant (keskmine ≤ 2,5 viimase 10 lepingu üle → 14-päevane peatamine; kolmas peatamine → alaline blokeering) on näidatud nii töötajale kui kliendile hinnangu-ajaloo pindadel ja vaiete-nõukogu UI-s, nii et „õiglus" tugineb avaldatud reeglile.
- ⭐ tase töötaja-teekonnas. Töötaja-teekond (B.10) sulgeb silmuse: Verifitseeritud märk pluss ⭐1–⭐5 sertifitseerimisredel voolavad otse §9 / EN §31.16 hinnamootorisse — kõrgem tase ja verifitseeritud staatus tõstavad proportsionaalselt töötaja brutomäära ja platvormi arvelduse.
E. Katvuse kaart praeguse builti vastu (seisuga v1.0.13)
| Teekonna samm | Olek | Viide |
|---|---|---|
| Kliendi registreerimine + ettevõtte profiil + AI arhitekt + käsitsi briif | ✅ tarnitud | §29 faasid 3–5 |
| Kolmeetapiline AI-sobitus, hägustatud isikuandmetega kandidaatide loend, CV detail | ✅ tarnitud | §29 faas 5 |
| Palkamiskutse-saatmine (üksik + bulk), ootel / vastu võetud ämbrid | ✅ tarnitud | §29 faas 6 |
| Pidev uuesti-sobitus uue töötaja saabudes avatud tellimuste vastu + mitmekanaline teavitus | 🚧 osaline — push & äpisisene elus, e-posti transport ootel | EN §31.7, §31.12 |
| Kahepoolne Platvormi NDA Dokobit allkirjastamisega + ASiC-E allalaadimine | ✅ tarnitud | §29 faas 11 |
| Isikuandmete avamine — rolli-põhine (kutsuja enda NDA avab vastaspoole isikuandmed talle) | ✅ tarnitud (v1.0.18+) | §D.5; engagementDetail.ts → computeIdentityUnlocked |
| Töötaja kiire pardalevõtt + AI / tava erialaredaktor + ESCO | ✅ tarnitud | §29 faasid 3–4 |
| SkillHub Verifitseeritud voog (taotlus → kontor → märk) | ✅ tarnitud (admini tööriistad veebis veel ootel) | EN §31.14 |
| Töötaja / kliendi vestlus AI-vastavuse järelevalvega | ✅ tarnitud (v1.0.12) | §29 faas 12 |
| Ühenädalase eellepingu allkirjastamine | ⏭️ planeeritud pärast vestlust | §29 faas 12+ |
| Geo-piiratud ajaarvestus, kahepoolselt kinnitatud tunnid, 24 h palgafondi väljamakse | ⏭️ planeeritud | §10, §14 |
| Avalikud arvustused + vaiete-nõukogu + peatamise lävendid | ⏭️ planeeritud | §13 |
| Suunamisprogramm (€1/h × 3 kuud, rahastatud marginaalist) | ✅ kood + UI tarnitud (v1.0.13); SEPA väljamakse-torustik ootab Faas 12 Lõik 5 | §29 faas 14 |
| Admin veebi-äpp (kasutajad, verifikatsioonid, hinnangud, ametid, sobitused, lepingud) | ⏭️ suurim ülejäänud slice | §29 faas 13+ |
Kaks suurimat ehitamata blokki on (1) usaldus- ja teostussilmus (vestlus → eelleping → ajaarvestus → väljamakse → arvustused → vaided) ja (2) admini veebi-äpp. Mõlemad peavad eelnema reaalsele GTM-ile väljaspool suletud Eesti pilooti.
1. Identiteet
- Sisemine koodnimi / töönimi: SkillHub
- Üheksrida: „Stripe sertifitseeritud käsitööle — ettevõtted panevad sertifitseeritud meeskonnad kokku minutitega, töötajad ehitavad kaasaskantava avaliku karjäärikande, iga euro on läbipaistev."
- Kategooria: B2B-tööjõu rendi turuplats sertifitseeritud käsitööliste jaoks ELis.
2. Visioon ja lifti-pitch
SkillHub on täisautomatiseeritud, AI-toega turuplats, mis lubab EL-i ettevõtetel leida, lepingustada, tunde mõõta ja maksta sertifitseeritud käsitöö tegijatele ilma ühegi telefonikõneta. Töötajad saavad kaasaskantava avaliku karjäärikande ja juurdepääsu tasulistele platvormi koolitustele, mis tõstavad nende taset. Iga tehing, tund, hinnang ja vaide otsus on avalikult nähtav — radikaalne läbipaistvus asendab pärandlike tööjõubüroode hägusust.
Platvormi poolelt jääb ainsaks inimsammuks sertifitseerimispaberite ülevaatus. Kõik muu — leidmine, sobitamine, lepingustamine, kella sisselöök, kinnitamine, väljamakse, arvustus, vaide järjestamine — on tarkvara.
3. Turuanalüüs
| Signaal | Allikas / number |
|---|---|
| EL tööjõu juhtimise turu CAGR | ~10,4% (kuni ~2,65 mld USD aastaks 2030) |
| Globaalne ajutise tööjõu turg | ~4,59 mld USD 2026 → ~6,35 mld USD 2034 (5,7% CAGR) |
| Sinikraede tööjõupuudus | Terav NL-is, DE-s, PL-is, HR-is — ehitus ja logistika |
| Pärandlike EL-i agentuuride digitaliseeritus | Väga madal — enamik töötab e-kirja, WhatsAppi ja kontorite kaudu |
| Digital-native konkurentide fookus | Jaekaubandus / majutus / lao lühivahetused |
| Vaba ruum | Sertifitseeritud käsitööd + radikaalne läbipaistvus + dünaamiline EL-ülene hinnastamine + koolitussilmus |
4. Konkurents
| Tasand | Mängijad | Nõrkus, mida ära kasutame |
|---|---|---|
| Digital-native nõudepõhised | Jobandtalent, Coople, Zenjob, Instawork, Traba, GoJob, Sidekicker, jobvalley | Õhuke katvus sertifitseeritud käsitöös. Hägus hinnastamine. Privaatsed arvustused. |
| Pärandlikud tööjõuhiiglased | Randstad, Adecco, ManpowerGroup | Filiaalipõhised, aeglased, killustunud bränd, hägused marginaalid, kasutajatel puudub omandivõimalus oma sertifikaadile. |
| EL sinikraede agentuurid | HireCrafter, Work Supply, Hire Abroad, GetWorker, European Workforce, Work Bridge Europe | Null automatiseeritust, müük e-kirja/WhatsAppi kaudu, turuplatsi pole, arvustusi pole, reaalajas tunniarvestust pole. Peamine häirimissihtmärk. |
| Tööjõu juhtimise SaaS | Ubeya, Workerbee, Maestro | Pole turuplatsid. Sertifitseeritud pakkumiskogumit pole. |
| AI-hinnastamise häirijad | Workers.be (€25/päev fikseeritud freelance marginaal), Staff-IT (fikseeritud 8% marginaal) | Ainult valgekraed. Pole sinikraesid, pole sertifitseerimist. |
5. Strateegiline positsioneerimine
Pärandagentuuride vastu: oleme oluliselt odavamad (18–28% marginaal vs nende 40–60%), kiiremad (minutid vs päevad) ja läbipaistvad. Digital on-demand mängijate vastu: spetsialiseerume sertifitseeritud käsitöödele tegeliku sertifikaadiredeli ja koolitusmootoriga, mida nad kiiresti järele teha ei saa. Tööjõuhalduse SaaS-i vastu: oleme kahepoolne turuplats, mitte tööriist — meie pakume töötajaid.
6. Kümme häirimisteljet
- Sertifitseerimis-tähtede redel (⭐1–⭐5) — kontrollitud paberid + platvormi koolitused. Avalik profiili-URL töötaja kohta („LinkedIn käsitöölisele"), kaasaskantav ja töötaja oma.
- Koolitusäri kui pakkumismootor — tasulised kursused toodavad pakkumist; konkurendid peavad selle ostma.
- Avalik läbipaistvuse sein — iga lõpetatud leping, tunnid, hinnang, väljamakse on anonüümitud-aga-koondatud kujul nähtav. Pärandagentuuridel võimatu kopeerida ilma marginaale paljastamata.
- Dünaamiline regionaalne hinnamootor — EL-i sinikraede reaalajas hinnaindeks riigi × ameti × sertifikaadi astme × lojaalsuse × nappuse järgi. Avalikult nähtav.
- Automatiseeritud deposiit + 24-tunnine väljamakse — klient maksab platvormile → topeltkinnitatud tunnid → töötaja maksab 24 h jooksul. Pärandagentuurid maksavad 30–60 päeva.
- AI tööjõu arhitekt — klient kirjeldab projekti tavakeeles → AI pakub välja meeskonna (rollid, tasemed, tunnid, hind, ajakava).
- Taust-AI sobitaja koos järjestatud alternatiividega — käivitub pidevalt; näitab täideklappinud kandidaate + alternatiive sobivuse %-ga, et klient saaks otsustada riski vs saadavuse vahel.
- Vaide-tribunal koos avalikult logitud otsustega — kvaliteet jõustab end ise; halvad osalised valivad end ise välja.
- Täielikult iseteenindav lepingustamine — vahetuse- või projektipõhine klikiläbi e-leping, riigipõhiselt lokaliseeritud, null telefonikõnesid.
- Töötaja-omandis maine kaasaskantavus — QR + W3C kontrollitavad tõendid, mille töötaja säilitab ka platvormilt lahkudes; muudab töötajad evangelistideks.
7. Platvormi ulatus
Me teeme
- Sobitame, lepingustame, ajastame, mõõdame tunde, maksame, hindame ja arbitreerime vaidlusi.
- Sertifitseerime töötajaid (paberite ülevaatus + meie koolitusrajad).
- Käitame palgafondi ja maksame töötajatele 24 h jooksul kinnitatud tundide järel.
- Pakume dünaamilist hinnaindeksit avalikult.
- Pakume API-d / veebihaake klientide ERP-dele.
Me selgesõnaliselt EI
- Paku majutust.
- Tegele sisserände, viisade kaasrahastamise ega A1 / lähetuspaberitega kaugemal kui infomaterjal.
- Halda projekte ega juhi platse (meeskonnajuhte ei tarnita meeskonnajuhtidena).
- Anna tööriistu, IKV-d ega transporti.
- Garantee töötaja sooritust kaugemale kui tema sertifitseerimisaste — sertifikaadi tase on leping.
See kitsas ulatus on tahtlik vastutuse tulemüür, kirjas igas raamlepingus.
8. Ärimudel
Tuluvood prioriteetsuse järjekorras:
- Turuplatsi marginaal: dünaamiline 18–28% kliendi tariifist, läbipaistva vahemiku piires. Töötajad ja kliendid näevad mõlemad hinnaindeksit ja astmete arvutust.
- Koolituse õppemaks: €19 (sissejuhatus) → €79–€499 (kutserajad) → €29 kiirvalideerimine olemasolevatele professionaalidele. Tulujaotus 70/30 (meie/partner) partnerkooli sisule; 100% kui sisu meie oma.
- Sertifikaadi kontrollitasu (€29) töötajatele, kes laadivad üles olemasolevad sertifikaadid, mis möödavad meie kursusest.
- API / integratsiooniaste ettevõtte ERP-dele (Procore, PlanRadar, SAP SF): fikseeritud kuutasu + tasu väljakutse kohta.
- Esiletõstetud töötaja / prioriteetne sobitamine: töötajad saavad valida väikese tasu eest prioriteetse paigutuse tihedates sobivuses. Piiritletud, et vältida „pay-to-win" domineerimist.
Hinna- ja marginaalipoliitika elab rate_index_*, pricing_multiplier_* ja margin_band_rules tabelites. Skeemi-välised sooduskampaaniad puuduvad.
9. Dünaamiline hinnamootor
Sisendid (avalikult teadaolev, kraabitud + normaliseeritud)
- Eurostat LFS tunnipalgad NACE × riigi järgi.
- Riiklikud kollektiivlepingu miinimumid (CAO, CLA, Tarif).
- Tööportaalide avaldatud tariifid (Indeed, LinkedIn, riiklikud portaalid).
- Konkurentide avalikud hinnalehed, kus saadaval.
- A1 lähetuse kulude erinevused piiriülestel paigutustel.
Valem (lihtsustatud)
ClientRate = BaseRate(country, trade)
× CertTierMultiplier(⭐1..⭐5) // 1.00 … 1.45
× LoyaltyMultiplier(worker_tenure) // 1.00 … 1.15
× ScarcityMultiplier(region_demand) // 0.95 … 1.30
× (1 + PlatformMargin) // marginaalivahemik 0.18 … 0.28
WorkerPay = ClientRate / (1 + PlatformMargin)
− MandatorySocial(country)
Marginaalivahemik: 18–28%
- Lööb pärandagentuurid (40–60%) alla.
- Vaikimisi läbipaistev — avalik leht näitab, kuidas iga tariif on koostatud.
- Lojaalsus tõstab töötaja palgakordajat, mitte meie marginaali. Kliendi tariif tõuseb veidi tõestatud töötajatele; platvormi marginaal jääb samaks.
Lojaalsuse redel
Iga 200 kinnitatud tundi → +1% töötaja palgakordajat, ülempiir +15%.
10. Palgafond ja varahaldus
- Reserv: 6% igast arveldusest läheb eraldatud palgafondi.
- Sihtreserv: ≥ 45 päeva jooksvat palgalehte.
- Eesmärk:
- Maksta töötajatele 24 h jooksul topeltkinnitatud tundidest, isegi kui klient pole veel arveldanud.
- Rahastada vaidetribunali tasusid (paneeli liikmed saavad palka).
- Katta lootusetute võlgade mahakandmised.
- Raamatupidamine: kahekirjeline pearaamat (
ledger_accounts,ledger_entries) — finantstõe ainus allikas. Stripe on rööbas; pearaamat on kanne.
11. Sertifitseerimissüsteem
- Astmed: ⭐1 (algaja) → ⭐5 (meister).
- Teed tähe juurde:
- Lõpeta platvormi kursus + eksam.
- Kiirtee: laadi üles olemasolevad tunnustatud sertifikaadid, kontrollitakse väljaandjate registrite vastu (
certification_issuers).
- Astme aegumine: sertifikaadid kannavad kehtivusaknaid
certification_types.validity_monthsjärgi. Uuendamise meeldetuletused saadetakse 90 / 30 / 7 päeva enne aegumist. - Ainus käsitsi platvormi samm:
certification_reviewerroll. Kõik muud operatsioonid on automatiseeritud. - Pettusekontroll: OCR + dokumendituvastuse mudel + registrite ristkontroll + juhuslik audit. Tõestatud pettus = jäädav blokk + avalik kanne.
12. Koolitusäri
- Tasuta tase: sissejuhatus + platvormi reeglid + ohutuse alused (kohustuslik nimekirja saamiseks).
- Tasulised rajad: ametipõhised videod + eksam + järelevalvega praktika (€79–€499).
- Kiirvalideerimine olemasolevatele sertifikaatidele (€29).
- Tööandja sponsoreeritud koolitus: klient maksab ette N töötaja koolituse konkreetse projekti jaoks; loob ekslusiivsust ja lojaalsust.
- Partnerkoolid: 30/70 tulujaotus (meie/nemad), kui sisu on nende oma; vastupidi, kui meie oma.
- Juhendaja roll:
worker_instructor— sertifitseeritud töötaja, kes loob sisu, teenib tulu osakaalu.
13. Usaldus — arvustused, vaided, blokeerimised
- Topelt-arvustus pärast iga lõpetatud lepingut (klient → töötaja ja töötaja → klient).
- Arvustused on avalikud ja seotud kontrollitud lepinguga (lepinguta arvustust ei ole).
- Vaide aken: 7 päeva pärast arvustuse esitamist.
- Tribunal: 2 juhuslikku sertifitseeritud töötajat + 1 juhuslik kontrollitud kliendihaldur + 1 platvormi arbitraator. Tasu palgafondist.
- Otsus avaldatakse Läbipaistvuse seinal.
- Auto-peatamine: keskmine ≤ 2,5 viimase 10 lepingu kohta → 14-päevane peatamine.
- Jäädav blokk: kinnitatud pettus, ohutusrikkumine või kolmas peatamine.
14. Kuus suletud automatiseeritud silmust
- Nõudluse vastuvõtt — AI tööjõu arhitekt → struktureeritud
shift_request. - Sobitamine — taust-sobitaja → järjestatud
match_candidateskoos protsentidega. - Lepingustamine — automaatselt loodud, riigipõhiselt lokaliseeritud e-leping, e-allkirjastatud.
- Teostus — geo-aiaga kella sisselöök + topeltkinnitatud tunnid.
- Arveldus — deposiit → palgafond → töötaja väljamakse → platvormi marginaal.
- Tagasiside ja usaldus — topelthinnang → avalik sein → vaidetribunal → blokeerimisloogika.
Ainult üks koht kogu platvormil nõuab inimest: certification_reviewer.
15. AI-kiht
Kaks koostöös AI-pinda jagavad samu aluseks olevaid mudeleid ja andmeid.
15.1 Kliendile suunatud AI tööjõu arhitekt (vestlev)
- Vestlus-UI kliendi armatuurlaual. Tavakeele sisend: „Mul on vaja valada vundamenti 3-korruselisele jaehoonele Rotterdamis alates 12. maist umbes 6 nädalaks, umbes 8 inimest."
- Eraldab struktureeritud
shift_request(ametid, arv, kuupäevad, sertifitseerimisastmed, asukoht, IKV, keeled). - Näitab reaalajas hinnaeelvaadet enne esitamist.
- Üks-klikk-esitus muudab vestluse päris
shift_requestreaks, käivitades sobitaja.
15.2 Tausta sobitaja (autonoomne)
- Käivitub kohe, kui
shift_request.status='submitted', läbi Cloudflare Queue töö. - Iga rolli nõude kohta: Vectorize sarnasusotsing töötaja oskuste + asukoha + saadavuse manuse järgi, seejärel reeglifiltrid (sertifitseerimisaste, kaugus, must nimekiri, keel) → kandidaadi kogum.
- Hindab iga kandidaadi 0–100%, talletatakse
match_candidates.score; tunnusepõhised panused talletataksematch_feature_values(selgitatavus). - Esitab kliendile kolm ämbrit:
- Täielik sobivus (≥ 90%) — pakutakse automaatselt; ühe-kliki broneering.
- Head alternatiivid (70–89%) — näidatakse sobivuse %-ga ja „miks" jaotusega; klient otsustab, kas võtta veidi madalam sobivus saadavuse nimel.
- Venitatud variandid (50–69%) — näidatakse ainult kui klient laiendab kriteeriume.
- Käivitub uuesti iga 15 min — kui töötajate saadavus muutub, kandidaadid keelduvad või uued töötajad registreeruvad. Kliendile saadetakse push/e-kiri, kui parem sobivus ilmub enne vahetuse algust.
15.3 Muud AI kasutused
- Pettuse / võltsitud sertifikaadi tuvastus: OCR + dokumendinägemus + registri ristkontroll.
- Arvustuse autentsus: sentiment + stüülanalüüs + plahvatuse tuvastus.
- Tugi-taandus: RAG-vestlusbott platvormi teadmusbaasil (Vectorize).
- Dünaamilise hinnastamise skoorimine: gradient-boosted mudel hinnaindeksil, treenitud iganädalaselt.
15.4 Mudeli marsruutimine
- Cloudflare Workers AI (odav, servas) jaoks: manused, klassifitseerimine, kerge marsruutimine.
- OpenAI / Anthropic AI Gateway kaudu jaoks: vestlev arhitekt, keerukas eraldamine, järelevalve hindamine. AI Gateway annab meile vahemällu, kulupiirid ja tõrkesiirde teenusepakkujate vahel.
16. Tehnoloogiavirn
| Kiht | Valik |
|---|---|
| Hostimine / SSR | Cloudflare Workers + Pages Nuxti Nitro Cloudflare eelseadistusega |
| Veebiraamistik | Nuxt 4 (Vue 3) + @nuxt/ui v4 + Tailwind v4 |
| Mobiili raamistik | Ionic Vue + Capacitor (iOS + Android) |
| DB | Cloudflare D1 (SQLite servas) — domeeni järgi shardatud; hiljem riigi järgi |
| ORM | Drizzle (TypeScript, kompileerub SQL-iks, esmaklassiline D1 tugi) |
| Vektorid | Cloudflare Vectorize |
| Failid | Cloudflare R2 (dokumendid, fotod) |
| Meedia konveier | Cloudflare Stream (kursusevideod) |
| Servavahe / KV | Workers KV (hinnaindeksi vahemälu, funktsioonilipud, seansitokenid) |
| Olekuga reaalaeg | Durable Objects (live vahetuseruumid, vestlus, live tunnikinnitus) |
| Järjekorrad / cron | Cloudflare Queues + Cron Triggers |
| AI — manused | Workers AI @cf/baai/bge-m3 (1024-d, mitmekeelne: ET / EN / RU / NL / DE / PL / HR) |
| AI — arutlus | Anthropic Claude (arhitekt, selgitused) otse-API kaudu; Workers AI varuvariandina odavatele kõnedele |
| AI Gateway | Cloudflare AI Gateway vahemällu, jälgitavusele, varuruteerimisele |
| Auth | Better Auth Workersitel, ainult magic-link (paroole pole); Drizzle D1 adapter; seansid D1-s, magic-linki lühiajaline olek KV-s |
| Maksed | Stripe Connect (Custom kontod), Stripe Treasury kus saadaval |
| E-allkiri | SignWell või DocuSign API |
| ID / KYC | Veriff või Onfido + AWS Textract sertifikaadipaberitele |
| OTA mobiilile | Capgo (avatud lähtekoodiga) või Ionic Appflow |
| Jälgitavus | Sentry (front-end) + Workers Logpush → R2 → Grafana; Better Stack tööajale |
| Analüütika | PostHog (EL-i hostitud) |
| Monorepo | pnpm workspaces + Turborepo |
| CI/CD | GitHub Actions + Wrangler deploy keskkonna kohta |
| IaC | Terraform Cloudflare-i ja Stripe konfiguratsiooni jaoks |
Kõik andmed hostitud EL-i regioonides (Frankfurt). GDPR artikli 30 register hooldatud esimesest päevast. DPIA sobitusmootorile enne tootmist.
17. Arhitektuur ja repositooriumi paigutus
Nii apps/web kui apps/mobile kannavad kõiki kasutajarolle (klient, töötaja, kool, admin). Jaotus on peamise pinna mitte võimekuse järgi:
apps/web— peamiselt klientidele (armatuurlauad, statistika, töötajate ülevaade — saavad suure ekraaniga kasu), aga töötajad saavad samuti brauserist ise teenindust.apps/mobile— peamiselt töötajatele (kella sisselöök, kohapealsed protsessid, push-teated, mobiili-eeline), aga kliendid saavad vahetusi liikvel hallata.
Eraldi worker-web rakendust pole — see rolli jaotus tühistati apps/web rolli-teadliku marsruutimise kasuks.
skillhub/
├── apps/
│ ├── web/ # Nuxt 4 + @nuxt/ui v4 + Tailwind v4. Klient-peamine, kõik rollid.
│ │ ├── app/ # Vue lehed, komponendid, poed, paigutused, i18n.
│ │ ├── server/ # Nitro API marsruudid + utiliidid (sobitaja, manused, postiklient, auth).
│ │ └── wrangler.toml # Per-keskkonna Cloudflare seosed (D1, AI, VECTORIZE, KV, R2).
│ └── mobile/ # Ionic Vue + Capacitor (iOS + Android). Töötaja-peamine, kõik rollid.
├── packages/
│ ├── shared-core/ # Puhas TS: zod-skeemid (shift_request_draft), ULID-abimees (newId()),
│ │ # äriloogika. Kasutab apps/web Nitro JA apps/mobile.
│ ├── db/ # Drizzle skeem + migratsioonid + seemne SQL. 17 skeemifaili,
│ │ # üks domeeni kohta (identiteet, geo, ai-sobitamine, …). 119 tabelit.
│ └── design-tokens/ # Brändi palett (#22ACD3) + Tailwind v4 + Ionic CSS muutujad.
├── infra/
│ └── wrangler/ # (reserveeritud) per-keskkonna wrangler.toml mitme-keskkonna kasvades.
└── docs/
└── PROJECT_REFERENCE.md # See dokument. Serveeritud live aadressil /reference (nitro server-asset).
Juuretööriistad: pnpm workspaces + Turborepo. CI/CD: GitHub → Cloudflare Pages (auto-deploy main).
Tulevased paketid (shared-api, shared-auth, icons) lisatakse, kui dubleerimise kulu ületab abstraktsiooniläve — hetkel piisab apps/web/server/utils/auth.ts + Better Authi kliendist.
18. Kasutajatüübid ja rollimaatriks
Platvormi-sisesed (meie)
| Roll | Eesmärk |
|---|---|
platform_superadmin |
Juurjuurdepääs, funktsioonilipud, hädaolukorra ops |
platform_ops_manager |
Igapäevane operatsioonide järelevalve |
certification_reviewer |
Tavavoo ainus käsitsi roll — vaatab üle sertifikaadipabereid, omistab tähti |
finance_controller |
Varahaldus, palgafond, väljamakse heakskiit, kooskõlastus |
compliance_officer |
KYC/KYB, riigiti litsentseerimine, GDPR, sanktsioonide skreening |
tribunal_arbiter |
Juhib vaide-paneele, väljastab otsuseid |
support_agent |
Piletid, parooli lähtestamine, otsesuhtlus |
content_editor |
Maandumislehed, hinnaindeksi ülekirjutused, CMS |
school_partnerships_manager |
Haldab partnerkoolide ja tulujaotust |
data_analyst |
Ainult-lugemine anonüümitud lao kohta |
Klient (äri) organisatsioon
| Roll | Eesmärk |
|---|---|
client_org_owner |
Esimene kasutaja, arve omanik, omandi üleandja |
client_org_admin |
Kutsub/haldab kasutajaid, allkirjastab raamlepinguid |
client_project_manager |
Loob vahetusetellimusi, vaatab tunde, hindab töötajaid |
client_site_supervisor |
Kohapealne kinnitaja — kinnitab kella sisse-/väljalööke, allkirjastab tunnid, väljastab kohapealseid eskalatsioone |
client_finance |
Näeb arveid ja avaldusi, käsitleb makseid |
client_viewer |
Ainult-lugemine — audiitorid, juhatuse aruandlus |
Töötaja
| Roll | Eesmärk |
|---|---|
worker_applicant |
Liitunud, veel sertifitseerimata — saab sirvida, võtta kursusi, esitada dokumente |
worker_certified |
Standard sertifitseeritud töötaja, sobitatav |
worker_lead |
Vabatahtlik silt konkreetsetel lepingutel — kohapealne edastaja (mitte projektijuht, juhtimisvastutust pole); väike preemia |
worker_instructor |
Sertifitseeritud töötaja, kes ka õpetab platvormi kursust |
Kool / koolituspartner
| Roll | Eesmärk |
|---|---|
school_org_owner |
Partnerkooli admin |
school_instructor |
Loob sisu, hindab eksameid |
school_proctor |
Jälgib praktilisi eksameid |
Välised
| Roll | Eesmärk |
|---|---|
api_integration |
Teenuse principal ERP-dele (Procore, PlanRadar, SAP SF) |
webhook_consumer |
Partner-süsteemid, kes võtavad sündmusi vastu |
system_service |
Sisemine teenuse-teenuse autentimine (cron, sobitaja, hinna uuendaja) |
Õigused talletatakse kujul permissions(code) + role_permissions(role_id, permission_id) + user_role_assignments(user_id, role_id, scope_type, scope_id), kus scope_type ∈ {global, organization, project, shift}.
19. Andmebaasi domeenid ja tabelid
Normaliseeritud, struktureeritud andmetele JSON-blobi pole. ~95 tabelit 16 domeenis. Kõigil tabelitel on id, created_at, updated_at, deleted_at (pehme kustutus) ja version kus asjakohane.
19.1 Identiteet ja ligipääs (11)
users, user_emails, user_phones, user_credentials, user_sessions, user_mfa_methods, user_oauth_accounts, roles, permissions, role_permissions, user_role_assignments.
19.2 Organisatsioonid (8)
organizations, organization_types, organization_memberships, organization_invitations, organization_addresses, organization_industries, organization_legal_docs, organization_kyb_checks.
19.3 Töötaja profiil (12)
worker_profiles, worker_profile_photos, skills, worker_skills, languages, worker_languages, worker_addresses, worker_transport_means, worker_availability_windows, worker_availability_exceptions, worker_preferences, worker_emergency_contacts.
19.4 Sertifitseerimine (9)
certification_types, certification_issuers, worker_certifications, worker_certification_documents, platform_cert_tiers, worker_cert_tier_history, cert_verification_reviews, cert_verification_review_notes, cert_renewal_schedule.
19.5 Koolitus ja koolid (14)
courses, course_categories, course_prerequisites, course_modules, course_lessons, course_lesson_resources, course_enrollments, course_lesson_completions, exams, exam_questions, exam_question_options, exam_attempts, exam_attempt_answers, proctoring_sessions.
19.6 Projektid, vahetused, määramised (11)
projects, project_sites, project_site_requirements, shift_requests, shift_role_requirements, shifts, shift_assignments, shift_assignment_status_history, shift_cancellations, shift_replacements, shift_invitations.
19.7 Lepingud (7)
contract_templates, contract_template_versions, contracts, contract_parties, contract_clauses, contract_signatures, contract_addenda.
19.8 Tunni-jälgimine (8)
timesheets, time_entries, time_entry_geopoints, time_entry_confirmations, break_entries, time_adjustments, overtime_rules, overtime_calculations.
19.9 Hinnastamine (9)
rate_index_countries, rate_index_trades, rate_index_entries, rate_index_sources, pricing_multiplier_types, pricing_multiplier_values, price_quotes, price_quote_line_items, margin_band_rules.
19.10 Maksed ja varahaldus (13)
stripe_accounts_workers, stripe_accounts_clients, payment_methods, payment_intents, invoices, invoice_line_items, invoice_payments, payouts, payout_line_items, payout_attempts, ledger_accounts, ledger_entries, salary_fund_movements.
19.11 Arvustused, vaided, usaldus (10)
reviews, review_subjects, review_criteria_scores, review_flags, review_responses, appeals, appeal_panels, appeal_panel_members, appeal_votes, appeal_rulings, trust_score_snapshots, ban_records.
19.12 Suhtlus (7)
notifications, notification_channels, notification_preferences, notification_deliveries, email_templates, email_template_versions, chat_threads, chat_messages.
19.13 Vastavus ja audit (8)
audit_logs, gdpr_requests, gdpr_data_exports, consent_records, consent_document_versions, legal_document_versions, data_retention_policies, sanctions_screening_results.
19.14 Geo viide (6)
countries, regions_admin1, cities, postal_codes, timezones, country_licensing_status.
19.15 AI ja sobitamine (6)
match_requests, match_candidates, match_feature_values, match_explanations, ai_model_versions, ai_interactions.
19.16 Integratsioonid ja konfiguratsioon (7)
api_keys, api_key_scopes, webhooks, webhook_subscriptions, webhook_deliveries, feature_flags, feature_flag_assignments, system_settings, shard_routes.
20. Andmebaasi konventsioonid
- Domeeni andmetele JSON-veerge pole. Ainsad erandid:
ai_interactions.prompt_snapshot,audit_logs.diff_snapshot— rangelt auditi / silumise jaoks, mitte kunagi koodiradades. - Polümorfseid FK-sid pole. Selgesõnalised nullitavad FK-veerud kontroll-kitsendustega.
- Raha väiksemates ühikutes (täisarvulised sendid) + selgesõnaline
currencyveerg. - Ajatemplid UTC ISO-8601-s, lokaliseeritud ainult esitluses.
- Vaikimisi pehme kustutus; kõva kustutus ainult GDPR-i kustutuse korral.
- Migratsioonid: Drizzle Kit, versioneeritud
packages/db/migrations-is, üks migratsioon loogilise muudatuse kohta. - Mitut entiteeti hõlmavad mutatsioonid käivad teenusekihi kaudu transaktsioonidega. Marsruudikäsitlejad ei sisalda kunagi ad-hoc SQL-i.
- Mitme-rentniku valmidus: igal rentnikule kuuluval tabelil on
organization_id(võicountry_idtuleviku shardimise jaoks). D1 shardi marsruutimine määratletudshard_routes-is, kui horisontaalne skaleerimine algab. - Indekseerimine: iga FK indekseeritud; iga filtreeritav veerg indekseeritud; liitindekseid kuumadele päringutele dokumenteeritud skeemifaili kommentaarides.
21. Disainifilosoofia
Mobiili-eeline, native-tunnetus, „floating-flat".
Põhipõhimõtted:
- Ekraan on lõuend. Taust on pind. Interaktiivsed elemendid asetuvad selle peal, mitte sees pesastatud konteinerites.
- Minimaalne katmine. Pole virnastatud kaarte, pole ümarusega paneele ümarusega paneelides. Maksimaalselt üks visuaalse katmise tase.
- Hõljuvad elemendid. Nupud, märgid, kiibid ja olulised UI-tükid tunduvad nagu tausta peal — saavutatud peene varju, värvikontrasti ja tüpograafiaga, mitte ääristega.
- Tugev kontrast, mitte kastid. Hierarhia tuleb tüübi skaalast, kaalust, ruumist ja värvist — mitte ristkülikute joonistamisest.
- Heldelt valget ruumi. Vähemalt 16 px välimine padding mobiilil; 24–32 px veebis; sisu ei puuduta kunagi serva.
- Native platvormi kohanduvus. iOS-il kasutab rakendus iOS-i metafoore (swipe-back, lehemodaalid, SF Symbols kus lubatud). Androidil kasutab Material metafoore. Juhitud Ionic
mode="ios"/"md"kaudu. - Liikumine eesmärgiga.
@vueuse/motionainult oleku üleminekutele ja afordantsidele, mitte kunagi dekoratsioonile. - Vaikimisi ligipääsetav. Minimaalselt WCAG AA kontrast iga elemendi peal; minimaalselt 44×44 pt puutealad; fookus nähtav; vähendatud-liikumine respekteeritud.
- Ühtne pinnakeel. Sama nupp, sama märk, sama nimekirja-rea muster üle veebi ja mobiili — implementeeritud nende vastavates kitt-id, visuaalselt ühtlustatud disaini märkide kaudu.
Esteetilised viiteinspiratsioonid (ainult sisemiselt): Linear, Arc Browser, Things 3, iOS 18 Control Center, Monzo äpp. Mitte: Material 3 kaardi-rohke, Bootstrap-aja konteinerivirnastus, pärandagentuuri veebid.
22. Disainimärgid ja esteetilised reeglid
Märgid elavad packages/design-tokens/-is ja neid kasutavad Tailwindi config (web) ja Ionic CSS-i kohandatud omadused (mobile).
Värvi kavatsus (lõpppalett kasutaja heakskiidu ootel — kohatäitjad)
- Pind: üks soe murdvalge (hele) või sügav lähedasel mustal (tume); mitte kunagi puhas valge ega puhas must.
- Esmane aktsent: üks signaalvärv, kasutatud säästlikult — toimingutele.
- Teisene aktsent: usalduse / kontrollitud / sertifitseeritud indikaatoritele.
- Semantiline: edu, hoiatus, oht, info — vaiksed, mitte kunagi küllastunud.
- Tekst: kolm taset (tugev, vaikimisi, vaigistatud). Mitte rohkem.
Vahede skaala
4, 8, 12, 16, 20, 24, 32, 40, 56, 72, 96 px. Mitte midagi vahepeal.
Raadiuste skaala
0, 4, 8, 12, 16, 9999 (tablett). Nupud vaikimisi 9999 (tablett) või 12; kaardid 16. Mitte kunagi rohkem kui kaks raadiust samal ekraanil.
Tüübi skaala (mobile / web)
- Display: 32 / 48
- Title: 24 / 32
- Headline: 20 / 24
- Body: 16 / 16
- Caption: 13 / 14
- Micro: 11 / 12 Kasutatavad kaalud: ainult 400, 500, 600, 700.
Vari / kõrgendus
Maksimaalselt kaks kõrgendustaset: puhkav (peen, 1–2 px) ja tõstetud (aktiivsetele nuppudele, kleepuvatele ribadele, toastidele). Staatilisel sisul lange-varjud puuduvad.
Mida mitte teha
- Pesastatud kaarte pole.
- Gradiendid puuduvad, välja arvatud maksimaalselt üks ümbritsev hero-gradient pinna kohta.
- Nuppudel ääriseid pole; kasuta tausta + varju.
- Pole väikeseid ikoone ilma seotud puutealata.
- Pole tugevaid täidetud taustu iga nimekirja-elemendi taga — elemendid eralduvad ainult vahede või 1 px peene joonega.
23. Turule mineku plaan
Faas 0 — nädalad 0–4: Vundament
- Juriidiline isik + KMKR (soovitus: NL, parim usaldusväärsus EL-i klientidele; EE e-residentsus kui ainuasutaja ja kiirus on prioriteet).
- Domeen + kaubamärgi pühkimine.
- Stripe Connect taotlus (2–4 nädala ette-aeg — alusta päev üks).
- Ehita tasuta Tööjõu vajaduste analüüsija eraldiseisva lead-gen lehena. Püüab e-kirjad ja struktureeritud nõudluse enne MVP olemasolu.
- Käsitsi-allika 50 piloot-töötajat + 5 piloot-klienti ÜHES riigis + ÜHEL ametil. Soovitus: NL + raketise/sarrusepaigaldus (kõrged tariifid, terav nõudlus, korralik lähetuste koridor).
Faas 1 — nädalad 4–12: MVP, 1 riik, 1 amet
- Tarni silmused 1–5. Silmus 6 esimesed 2 kuud käsitsi.
- 3 sertifitseerimisrada elus.
- Läbipaistvuse sein elus alates lepingust nr. 1.
- Eesmärk: 1 000 lõpetatud töötaja-vahetust 90 päeva jooksul.
Faas 2 — kuud 3–9: 3 riiki, 5 ametit
- Laienda NL → DE → PL. Ametid: raketis, sarrusepaigaldus, keevitamine, lao-ops, kahveltõstuk.
- Käivita tasulised kursused.
- SEO-masin elus (10 000+ programmaatilist lehte).
- Esimene ERP integratsioonipartner (PlanRadar).
- Eesmärk: €500 k GMV / kuus.
Faas 3 — kuud 9–18: Pan-EL skaala
- Lisa FR, BE, PT, CZ, HR, RO.
- Ava API partner-ERP-dele.
- Ettevõtte MSP pakkumine.
- Eesmärk: €5 M GMV / kuus.
Turunduskanalid, prioriteedi järjekorras
- Programmaatiline SEO (10 k+ pikasaba lehed linn × amet hinnaindeksist).
- Asutaja-juhitud LinkedIn-i sisu (ops / HR ostja persoona).
- Külmane väljaminek, mille konksuks on Tööjõu vajaduste analüüsija (mitte müügi-pitch — tasuta tööriist).
- Töötaja-poole TikTok / YouTube Shorts päris teenistus-kviitungitega.
- Erialaajakirjandus-PR (NL: Cobouw; DE: Bauindustrie; PL: Muratorplus).
- Kutsekoolide + ametiühingute partnerlused (kogus-sertifikaadi konveier).
- Tasuline reklaam viimasena — alles pärast seda, kui orgaaniline baasjoon on mõõdetav.
24. KPI-d
| Mõõdik | Eesmärk 12. kuuks |
|---|---|
| Aeg kliendi liitumisest → esimene töötaja kohapeal | < 24 h |
| Keskmine vahetuse täitmise aeg | < 4 h |
| Töötaja väljamakse aeg pärast tundide kinnitamist | < 24 h |
| Segatud platvormi võtumäär | 22–25% |
| Bruto kuu GMV | €5 M |
| Sertifitseeritud töötajate kogum | 10 000 |
| Aktiivsed ettevõtte kliendid | 300 |
| Töötaja 90-päeva hoidmine | > 60% |
| Kliendi NPS | > 45 |
| Vaidluse määr (avatud vaided / lõpetatud lepingud) | < 1,5% |
25. Riskid ja maandused
| Risk | Maandus |
|---|---|
| Riigipõhine ajutise tööjõu litsentseerimine (NL WAADI, DE AÜG, FR GEIQ, PL APT, jne) | Registreeri järjestikku riigi kaupa; ära kunagi käivita riiki ilma litsentsita. Litsentseerimise olek talletatud country_licensing_status-is. |
| Hinnastamise „race to the bottom" | Konkureeri läbipaistvuse + sertifitseerimise kvaliteediga, mitte tooresturuhinnaga. Fikseeritud marginaalivahemik kaitseb meid. |
| Võltsitud sertifikaadid | Väljaandja-registri ristkontroll + juhuslik audit + jäädav blokk kinnitatud pettusele + avalik kanne. |
| Töötaja mittemaksmisest tingitud rahavoolünk | Palgafondi reserv + Stripe Treasury / Capital + arve-faktooring ainult suurklientidele. |
| Platvormi vastutus kohapeal (õnnetus, ohutus) | Selgesõnalised ulatuse väljajätud + kohustuslik kliendi kindlustustõendi üleslaadimine enne saatmist + auditilogid. |
| Konkurent kopeerib läbipaistvuse seina | Esimene-liigutaja + SEO kaitsekraav + meil on andmestik juba käes. |
| AI hallutsinatsioon Tööjõu Arhitektis | Struktureeritud funktsiooni-väljakutsed zod-validatsiooniga; inimese-kinnitatav eelvaade enne esitamist; audit ai_interactions-is. |
| D1 päeva-tasuta kihi kirjutuse limiit tippkoormusel | Sharda DB riigi kaupa varakult; uuenda Workers Paid-ile sel päeval, kui me ületame (kulu: $5/kuus). |
26. Teekaardi faasid
Iga faas lõpeb go/no-go ülevaatusega KPI-de vastu.
- Faas 0 (M0–M1): Vundament. Tulem: Tööjõu vajaduste analüüsija elus, juriidiline isik & Stripe käimas, piloot-konveier tuvastatud.
- Faas 1 (M1–M3): MVP NL-is + raketis/sarrus. Tulem: silmused 1–5 elus, esimesed 1 000 vahetust.
- Faas 2 (M3–M9): Mitme-riigi laienemine. Tulem: 3 riiki, 5 ametit, tasulised kursused, ERP-integratsioon.
- Faas 3 (M9–M18): Pan-EL skaala. Tulem: 9 riiki, ava-API, ettevõtte aste.
27. Sõnastik
| Termin | Tähendus |
|---|---|
| ⭐ aste / täht | Platvormi sertifitseerimise tase 1–5. |
| Vahetuse tellimus | Kliendi nõudluse deklaratsioon — enne sobitust / lepingustamist. |
| Vahetus | Konkreetne töötaja-koht tellimuse sees pärast sobituse algust. |
| Määramine | Konkreetse töötaja sidumine vahetusega. |
| Palgafond | Eraldatud varahaldus, mis ettemaksena rahastab töötajate väljamakseid. |
| Läbipaistvuse sein | Avalik, anonüümitud kanne iga lõpetatud lepingu kohta. |
| Tribunal | Vaide-paneel: 2 töötajat + 1 kliendihaldur + 1 platvormi arbitraator. |
| Hinnaindeks | Avalik live-tabel baastariifidest riigi × ameti järgi, uuendatud avalikest andmetest. |
| AI tööjõu arhitekt | Vestlev AI, mis aitab klientidel muuta projekti kirjelduse struktureeritud vahetustellimuseks. |
| Tausta sobitaja | Autonoomne teenus, mis pidevalt uuesti järjestab kandidaate avatud vahetustellimustele. |
| Floating-flat | Meie disainiesteetika: elemendid tunduvad istuvat tausta-pinnal, minimaalne katmine. |
| Magic-link | Paroolita sisselogimisvoog, mida kasutab Better Auth — ühekordne URL, mis e-postiga Resendi kaudu kasutajale saadetakse. |
| Vectorize indeks | Cloudflare-i hallatav ANN-pood. Tootmise indeks skillhub-worker-embeddings, 1024-d kosinus, populeeritud bge-m3 manustega töötaja profiilitekstist. |
| Match request | Üks sobitaja käivitus shift_request_draft-i vastu. Püsivaks talletatud match_requests + match_candidates + match_feature_values-is, et kandidaadi-vaade säiliks taaskäivitades. |
28. Teostuse seis
Hetkepilt viimase muudatuselogi sissekande seisuga. Kõik, mida siin pole nimetatud, on endiselt §26 järgi „plaanis".
28.1 Tootmises elus (skillhub-app.pages.dev)
- Monorepo & juurutus: pnpm workspaces + Turborepo;
apps/webjuurutatakse Cloudflare Pages-ile igamain-i tõuke peale. - Seosed: D1 (
skillhub-prod), Vectorize (skillhub-worker-embeddings, 1024-d kosinus), Workers AI, KV (SKILLHUB_KV), R2 (skillhub-docs). - Identiteet & auth: Better Auth + Drizzle D1 adapter; ainult magic-link. Päis vahetab sisselogimise CTA ja kasutaja-rippmenüü vahel.
/welcomepost-sisselogimine määrab rolli/api/me/ensure-rolekaudu. Magic-linki saatmine Resend-i kaudu kinnitatudskillhub.eesaatedomeenilt (info@skillhub.ee). - AI tööjõu arhitekt:
/requestleht vestleb Anthropic Claude'iga/api/ai/architectkaudu, väljastab range valideeritudshiftRequestDraft(zod) ja renderdab struktureeritud eelvaate. - Semantiline sobitamine:
/api/matchmanustab kavandibge-m3-ga, päringab Vectorize-i (top-K 50)homeCountryIso2-ga filtreerituna, hüdraatib töötajaprofiilid D1-st, käivitab reeglipõhise skoorimise (oskuste sobivus, kaugus, keel, usaldus). Kui seosed pole saadaval, kasutab mälusisest seemnekogumit (kohalik dev). - Sobituse püsivus: iga vectorize-raja käivitus kirjutab
match_requests+match_candidates+match_feature_valuesD1-sse pluss 7-päevase KV-hetkepildi kavandist (match-draft:<id>).GET /api/match/[id]re-hüdraatib ja re-järjestab deep-linki / sügav-värskenduse jaoks kandidaadi-lehel. - Viite-leht:
/referencerenderdab seda dokumenti elus, serveerituna Nitro server-asset-ina (töötab Workers-il, faili-süsteemi pole). - i18n: ET (vaikimisi Eesti käivituseks), EN, NL, DE ühendatud
@nuxtjs/i18nv10 kaudu.
28.2 Tootmise andmed (praegune seeme)
POST /api/admin/seed-workers (kaitstud X-Seed-Token-iga) kirjutab idempotentse demo-kogumi:
9 töötajat, 9 oskust, 5 keelt, 4 linna, 9 vektorit. See on suitsutest-kogum — asendatakse päris töötajate liitumisega faasis 2.5.
28.3 Skeem maandunud (Drizzle + D1 migratsioon 0000_initial)
Kõik 17 skeemifaili packages/db/src/schema/-is on D1-s elus: identiteet (Better Authi tabelid), geo, organisatsioonid, töötaja-profiil, sertifitseerimine, koolitus, projektid-vahetused, lepingud, tunnijälgimine, hinnastamine, maksed, arvustused-usaldus, suhtlus, vastavus, ai-sobitamine, integratsioonid. Tabelid on olemas; populatsioon toimub järk-järgult faasi kaupa.
28.4 Mobiilirakendus (apps/mobile) — raamistatud, käivitatav
Ionic Vue 8 + Capacitor 8 + Vite 7, jagab @skillhub/shared-core ja @skillhub/design-tokens veebirakendusega. iOS (SPM) ja Android kestad lisatud; pnpm exec cap sync on integratsioonisamm enne Xcode / Android Studio avamist.
- Marsruudid:
/sign-in→/sign-in/check-email→/tabs/{home,shifts,shifts/:id,profile}. - Auth: better-auth klient magic-link pluginaga. Native WebView-id ei suuda kanda kolmanda-poole-küpsisega seanssi, nii et voo kasutab Ühekordse-Tokeni (OTT) silda: magic-link maandab süsteemibrauseri
/api/auth/native-bridge-le, mis genereerib OTT ja suunabskillhub://auth/callback?ott=…-le; rakendus vahetab OTT pikaealise Bearer-tokeni vastu ja talletab selle Capacitor Preferences-isse.apiFetchümbris süstib tokeni igale päringule (Authorization: Bearer …). Veebi seansid kasutavad endiselt standardset küpsiserada. - Töötaja vahetuste tsükkel (lugemine + vastamine):
GET /api/me/shifts— ootel kutsed + vastuvõetud määramised, ühendatud platsi / projektiga.GET /api/me/shifts/[id]— ühe vahetuse detail, sealhulgas nõuded ja töötaja kutse-olek.POST /api/me/invitations/[id]/respond— vastu võtta / keelduda; vastuvõtul loobshift_assignmentsrea.
- i18n: ET (vaikimisi) + EN paarsus veebiga.
- Mobiili disainikeel: üksainus
AppScreenkest (poolläbipaistev tööriistariba, suur hero-pealkiri,--sh-screen-pad: 20px), uuesti kasutatavsh-tilealgprimitiiv (16 px raadius, 1 px peene joonega ääris, varjuta) ja vertikaalse rütmi skaala (--sh-stack-{xs,sm,md,lg,xl}). Esmased toimingud asetuvad otse lõuendile —IonCardümbriseid pole, pesastatud konteinereid pole. Pinna, brändi ja semantilised CSS-muutujad elavadapps/mobile/src/theme/variables.css-is ja pärinevad@skillhub/design-tokens-ist.
28.5 Veel pole alustatud (järgmised verstapostid)
- Töötaja onboarding-i kirjutamise rada —
POST /api/workers, et luuaworker_profile+ lükata manused Vectorize-i (kasutades uuestiseedWorkerPool-i upsert-abimeest). - Kliendi onboarding —
organizations+organization_membersloomis-voog veebis. - Vahetuse-tellimus → avaldatud vahetus — muuda püsivaks salvestatud sobitus
shift_requestsreaks +shifts+shift_invitationskoosmatch_request_idlülitusega. - Demo-andmed esmasele mobiili-sisselogimisele — sea üles töötajaprofiil + paar kutset, et värske sisselogimine maanduks populeeritud avalehel.
- Tunnijälgimine, maksed, sertifitseerimise üleülevaatus-järjekord — Faas 3 ja edasi §26 järgi.
28.6 Operatiivsed märkused
- Saladused (
ANTHROPIC_API_KEY,BETTER_AUTH_SECRET,RESEND_API_KEY,SEED_TOKEN) loetakse päringuajalevent.context.cloudflare.env-ist, mitte kunagiruntimeConfig-ist — Cloudflare Pages ei avalda projekti saladusi build-runner-ile. - Vectorize-i metaandmete indeks
homeCountryIso2on loodud; lisa veel (nthasForkliftCert), kui filtritavad pakkumisnõuded ilmuvad. - vue-i18n reserveeritud märgid —
@,{,},|on sõnumistringides reserveeritud (lingitud sõnumid, nimega interpolatsioon, mitmus). Et lisada ükskõik millisesseapps/web/i18n/locales/*.jsonvõiapps/mobile/src/i18n/locales/*.jsonlokaalifaili literaalne@(nt e-posti placeholder), kirjuta see kujul{'@'}. Paljas@põhjustab komponendi mountimisel sõnumikompilaatoristSyntaxError: 10ja terve ekraan jääb tühjaks.
29. Teekaart ja ülesannete jälgija
Elav teekaart, mis koondab kõik iteratsioonid alates projekti algusest. Sektsioonid on vaikimisi kokku pandud — klõpsa avamiseks. ✅ tarnitud · 🚧 töös · ⏭️ järgmisena plaanis · ⏸️ blokeeritud / edasi lükatud · 🛑 tühistatud. Viimati konsolideeritud: 2026-05-09 (kaetud v1.0.0 → v1.0.11). Vastab inglise keele §32-le; ingliskeelne versioon
docs/PROJECT_REFERENCE.mdjääb täielikuks viiteallikaks.
29.1 Seisundi ülevaade
| Faas | Lõik / versioon | Seisund |
|---|---|---|
| Projekti raamistik ja tellingud | — | ✅ |
| Autentimine + magic-link (Resend, Better Auth) | — | ✅ |
| Mobiilirakenduse kest — 2026 Apple-native (§29 EN) | v1.0.0 → v1.0.4 | ✅ |
| Sissejuhatus + töötaja / tööandja seadistus (§30 EN) | — | ✅ osaliselt |
| Töötaja eriala-profiilid + ESCO (§31.4 EN) | — | ✅ |
| AI sobitus v1 — kolmeastmeline torustik (§31.6 / §15.2 EN) | — | ✅ |
| Palkamissoovi-voog + hulgivalik (§31.8 EN) | — | ✅ |
| Androidi levitus + allalaadimisleht | v1.0.2+ | ✅ |
| OfferBriefView + sobituse tagasiside-silmus | v1.0.5 → v1.0.7 | ✅ |
| Verifitseerimissüsteem (§31.14 EN) | v1.0.8 | ✅ |
| Töösuhete (engagement) skelett + Töötajate vahekaart | v1.0.9 | ✅ |
| Hinnamootor (§9 / §31.16 EN) — 15% / 10% kahepoolne NDA, EE 2026 seeme | v1.0.10 | ✅ |
| Platvormi NDA — Dokobit-allkirjastamine (§31.15 EN) | v1.0.11 | ✅ |
| Vestlus + administraatori järelevalve | v1.0.12 | ✅ |
| Suunamisprogramm — €1/h × 3 kuud, marginaalist rahastatud (Faas 14) | v1.0.13 | ✅ |
| Apple / Google sotsiaalne sisselogimine | — | ⏸️ ootab volitusi |
| Telefoni verifitseerimine (Twilio Verify) | — | ⏭️ plaanis |
| Veriff KYC (väljaspool EE-d) | — | ⏭️ plaanis |
| Europassi JSON import / eksport | — | ⏭️ plaanis |
| iOS levitus (TestFlight) | — | ⏸️ tasuline Apple Dev konto |
| Võtmehoidla varundus eemal arvutist | — | ⏸️ kasutaja toimingu ootel |
29.2 Üksikasjalik kontroll-loend
Faas 1 · Projekti raamistik ja tellingud ✅
-
.gitignore+.env.example+ saladuste hügieen - Wrangleri paigaldus + Cloudflare autentimine (
wrangler whoami) - Nuxt 4 uuendus + näidismallide eemaldamine
- pnpm monorepo (turborepo,
apps/web,apps/mobile,packages/{db,design-tokens,shared-core}) - Bränd + disainimärgid (floating-flat palett, primaarvärv
#22ACD3, tume režiim vaikimisi) - Favicon + SkillHubi sõnamärgi varad
-
@nuxtjs/i18n(ET vaikimisi + EN/NL/DE) - Drizzle skeemi tellingud (17 domeeni, ~95 tabelit)
- Cloudflare ressursid (D1, R2, Vectorize, KV, Queue,
wrangler.toml) -
/referencemarsruut + virtuaalmooduli markdown-edastus - AI Workforce Architect (Claude API, zod-valideeritud struktuurne ekstraktsioon)
- Taust-AI sobitaja v0 (Queue + Vectorize ANN)
- Better Auth + magic-link Resend kaudu
- Mobiilirakenduse tellingud (Ionic Vue + Capacitor)
- Cloudflare Pages env +
skillhub.eekohandatud domeen
Faas 2 · Mobiilirakenduse kest — 2026 Apple-native ✅
- Pinnasüsteem (
--sh-surface-0/1/2, juuksejoon, klaastäide / hägu) - FloatingTabBar (64 px kõrge, 28 px raadius, hägustatud poolläbipaistev täide)
- Lucide ikoonide üleminek (ionicons eemaldatud)
- Inter Variable iseserverdatud veebifont
- Pillinupud +
@capacitor/hapticskerge impulss - Pehme täidisega SHField sisendid (sälguga kontuur, brändi fookuse hõõg)
- SkillHubi logo SFC + animeeritud loosungitega lõpukuva
- Keele-pilli vahetaja (Capacitor Preferences)
- iOS turvaala + kaamerasaareke
- Stabiilne navbar (sisendi fookuses ei nihku)
- Tab-saareke kohendatud kodu-indikaatorile lähedale
Faas 3 · Sissejuhatus ja identiteedi voog ✅ osaliselt
- Rolli valik + püsivus (
users.preferred_role,onboarding_completed_at) - Sissejuhatuse swiper (3 slaidi rolli kohta, kõnekapunktidega)
- Minimaalse profiili kogumine (töötaja + tööandja organisatsioon)
- Profiilipildi üleslaadimine (Capacitor Camera + R2)
- Töötaja eriala-profiil (1:N) skeem + CRUD-otspunktid
- ESCO ametinimekirja import +
/api/esco/search+ puu-sirvija - AI töötaja-profiili koostaja (Architect-i režiim +
SpecialtyAIChatView) - Smart-ID / Mobile-ID sisselogimine (demo liivakast + RP REST v3 klient)
- Pakkujaga sidumise dokumentatsioon (
docs/MOBILE_LOGIN.md) - Kontekstipõhised load (kaamera-küsimine alles esimesel pildiüleslaadimisel)
- Sotsiaalne sisselogimine — Apple + Google
@capgo/capacitor-social-loginkaudu (env-platsihoidjad valmis) - Telefoni verifitseerimine (Twilio Verify) eriala-profiili lõpetamisel
- Europassi JSON import / eksport
- Veriff KYC kõrvalvariant väljaspool EE-d (Smart-ID katab EE/LV/LT)
Faas 4 · Töötaja-profiili / eriala-redaktori iteratsioon ✅
- Sünnipäeva sisend — DD.MM.YYYY kuvamine, säilitatakse YYYY-MM-DD
- AvatarPicker üksiku põhipesaga, eelvalik autentimisprofiili pildist
- Andmebaasipõhised riigid / admin-1 / linnad +
/api/geo(GeoNames cities1000-tasand) - IANA ajavööndi ripploend (
GMT±HH:MM Linn) - EscoTreeBrowser leht-valiku → välja-täitmine; sügavus-5 lehed sügavus-4 üksusrühmade all
- SpecialtyEditorView hele stiil + sektsioneeritud alamkaardid, prügikast piiril
-
extended_profileJSON-veergworker_specialty_profilespeal - Isikuandmed / kogemus / haridus / litsentsid / oskused sektsioonid
- 3-pesaline R2 manuste sektsioon
SpecialtyEditorView-is (asendab photoUrl tekstivälja) - Töötaja profiil (isikutasand) — identiteet, elukoht, maks, väljamaksed
- CompanyProfileSection — riik / maakond ripploendid, ainult-loetav vaade + redigeerimise lüliti
- Sõbralikud Zod-vead +
useFieldErrors+ SHField punase äärega + iga välja sõnumid - Markdown-i renderdamine AI-arhitekti vestluses (turvaline rea-renderdaja)
- Architect-i prompt: peita JSON-blokk kasutaja vastusest
- Soo väli töötaja skeemis + UI valija
Faas 5 · Tööandja tellimuste pariteet + AI sobitus-torustik ✅
- Tööandja
/tabs/ordersloend + uue tellimuse tegevuste lehter (AI vs käsitsi) - OrderEditorView ESCO ametinimekirja, geo-andmete, nõutavate vs eelistatavate oskuste / sertide / keelte, min kogemuse, vabatahtliku vanuse / soo eelistusega (põhjendusega)
- Tellimuse detail / muutmine / kustutamine + Salvesta mustandina / Loobu / Avalda & Sobita
-
shiftRequestDraftlaiendused (graafik / tööriistad / IKV / hierarhia) - Etapp 1 — Vectorize meelde tuletamine (
querySpecialtyVectors,kind=specialtyfilter) - Etapp 2 — deterministlik järjestaja (
specialtyRanker.ts: kõvad filtrid + kaalutud skoorimine; haversine geo) - Etapp 3 — Claude rerank (
matchRerank.ts: prompti redaktsioon, segatud0.7 × LLM + 0.3 × deterministlik, €0.02 päringu lagi) - Püsivus:
match_requests,match_candidates(LLM veerud),match_feature_values,ai_interactions,ai_model_versions -
GET /api/me/employer/orders/:id/candidates(3-grupiline kandidaadipakk +aiVerdict.rationale) - Mobiili + veebi kandidaadiloend (Perfekt ≥ 90 / Tugev 70 – 89 / Kaalumist väärt 50 – 69 / Kauge võimalus < 50)
- CV-stiilis kandidaadi detailileht (mobiil + veeb) hägustatud portree + identiteedi-luku märgistusega
- PII redaktsioon (käsi „Worker #N", nime / e-posti / telefoni / aadressi pole; pildi hägu ainult detailis)
-
lastMatchedAtnäitamine kandidaadi-lehel
Faas 6 · Palkamissoovi-voog + teavitused ✅
-
hire_requeststabel +POST /api/me/employer/orders/:id/hire-requests(hulgi 1..50) -
GET /api/me/worker/hire-requests+POST .../respond(vastu võetud / tagasi lükatud) - Hulgivaliku UX (mobiil + veeb) — päise lüliti, märkeruudud, kleepuv „Saada N" jalus
- Töötaja ootel kutsete kaart HomeView-l (asendab avaliku „Palkamissoovid" pinda)
- Rakendusesisesed teavitused (
notificationstabel,notify()server-sissepääs,/api/me/notifications+:id/read) -
device_tokenstabel +/api/me/device-tokens+ Capacitor push registratsioon - FCM v1 dispetšer (RS256 JWT Web Crypto kaudu, OAuth2,
UNREGISTEREDtunnused märgitakse aegunuks); APNS haru järelejäänud - Sobituse-tulemuse tagasiside (
setMatchCandidateOutcomekutse / vastuvõtu / keeldumise korral) - Profiili täielikkuse värav blokeerib eriala avaldamise kuni
worker_profileon täielik - FCM / APNS seadistuse juhend
docs/MOBILE_LOGIN.md §11-s
Faas 7 · Androidi levitus + allalaadimisleht ✅
- Gradle väljalaske allkirjastamise konfig +
keystore.properties(gitignored) -
skillhub-release.keystoregenereeritud - Veebi-kogum +
cap sync+assembleRelease(JDK 21 Android Studio-st) - R2 ämber
skillhub-downloads+ allkirjastatud APK üleslaadimine -
/downloadsleht ühendatud avaliku R2 URL-iga -
/api/mobile/versionotspunkt (android + ios blokid) - Rakendusesisene uuenduse viip (
useAppUpdateCheck) — versiooni-järgi unustamine (mitte 24h vältimine) - Seadete hammasratta menüü — Teave (Devskills OÜ juriidilised andmed) + Kontrolli uuendusi
- Androidi adaptiivne ikoon + iOS AppIcon regenereeritud
apple-touch-icon-original.png-st
Faas 8 · OfferBriefView + Verifitseerimissüsteem (v1.0.5 → v1.0.8) ✅
- OfferBriefView (töötaja-poole detailne tööpakkumise kokkuvõte)
- Tundlikud väljad hägustatud + lukus „Vastuvõtt + NDA" värava taga
- Töötaja palkamissoovi voo redaktsioon (legalName / regCode / KMKR / kontakt eemaldatud)
- Kohandatud IonModal
AboutDialog(asendab tühjaks puhastatud IonAlert) - OfferBriefView UI parandused — heledad kaardid, abi-ikoonid Aadress + Kontakt ridadel, CTA all-pesa
- v1.0.8 — SkillHub Verified:
verification_status+verified_atworker_profiles-il,worker_verification_requeststabel,VerifiedBadgekomponent, kandidaadi-kaardi + nav-pesa,VerifiedInfoView(/verified-info), kodu-promokaart
Faas 9 · Lõik 1 — Töösuhted + Töötajate vahekaart (v1.0.9) ✅
-
engagementsskeem + migratsioon (elutsükli FK-d, staatuse enum, allkirja ajatemplid) - OfferBriefView gradient-hoiatuskaart (Vastuvõtt = mittesiduv → NDA → prooviperioodi leping)
- Töötaja vastuvõtt loob
engagementsrea + suunab/engagements/:id/nda-le - NDA platshoidja vaade (kuni v1.0.11-ni)
- Engagement-otspunktid — tööandja loend (Kutsutud / Hõivatud), rolliteadlik detail, PII lukus enne mõlemat allkirja
- Tööandja Töötajate vahekaart (5-vahekaardiga ujuv riba, Kutsutud / Hõivatud alamlehed)
- Tööandja teavituselt suunamine engagement-detailile
- Tarne versionCode 10 / 1.0.9
Faas 10 · Lõik 2 — Hinnamootor (v1.0.10) ✅
- Migratsioon 0016 — NDA lahti sidumine,
country_tax_profiles,engagement_rates, staatuse enum uuendatud - Eesti 2026
country_tax_profilesseeme (33% sotsiaalmaks, 0,8 / 1,6% töötuskindlustus, 20% TuMS, 700 € maksuvaba miinimum, 24% KM, II samba opt-in) -
rate_index_entriesEesti seeme: 88 ISCO 2-numbriline × 15 admin-1 (PA5337, tunnimäär = kuu / 168h, 16% kasv, suprress-lahtrid imputeeritud) -
computeEngagementRate(Hübriid C:worker_gross = mediaan × 1.10 × tase × lojaalsus × harulduses;client_billed = (worker_gross + payroll) × (1 + marginaal); põrand 18%) - Snapshot
engagement_ratesreale palkamissoovi vastuvõtul (idempotente; ebaõnnestumine pole fataalne) - Engagement detaili hinnaplokk — töötajale
worker_gross, tööandjaleclient_billed, valikuline?breakdown=1 - Kahepoolne NDA tekstijaotus (töötaja ↔ SkillHub + klient ↔ SkillHub, ~1500 sõna EN + ET)
- Pre-NDA hinnakuvar (OfferBriefView, EmployerWorkersView, kandidaadi detail)
- Testid: maksumatemaatika, valuuta ümardamine, kordajatekett, fallback, rolli redaktsioon, variandi-suunamine
- Sõnastiku uuendus — tööandja (klient / üürija toote-UI-s) vs. SkillHub OÜ (juriidiline tööandja, EoR)
- Tarne versionCode 11 / 1.0.10
Faas 11 · Lõik 3 — Platvormi NDA Dokobit-allkirjastamine (v1.0.11) ✅
- S3.1 —
platform_nda_contracts+ vanemate FK-veerud; migratsioon 0019 (loogilised viidad; D1 mitme-rebuild piirang dokumenteeritud) - S3.2 —
buildPlatformNdaPdfdeterministlik A4 (pdf-lib, WinAnsi-puhastaja, identiteediga, sha256 Web Crypto kaudu) - S3.3 — Dokobit Universal Signing klient (
dokobit.ts) koos stub-režiimiga, kuiDOKOBIT_API_KEYpuudub - S3.4 —
POST /api/me/platform-nda/{start,complete}(R2 üleslaadimine, KV sessioon, auditrida, vanema viida) - S3.5 —
engagementProgress.tscomputeNext8-juhuline olekumasina draiver - S3.6 —
NdaSignViewCapacitor.Browser üleandmine + reaalajas pollimine (ilma lehe taaslaadimiseta) - S3.7 — Testid: PDF baidi-stabiilne sha256, olekumasina maatriks, redaktsioon
- S3.8 — i18n + tarne versionCode 12 / 1.0.11
Faas 12 · Lõik 4 — Vestlus + administraatori järelevalve (v1.0.12) ✅
-
chat_threadsskeem saabengagement_id(loogiline FK) +'engagement'liigi diskriminaatori; migratsioon0020_elite_next_avengers.sql - Idempotentne lõime loomine
engagementProgress.advanceOnPlatformNdaSigned-is — esimene kord, kui engagement jõuabpending_engagement_contracts-i (mõlemad kahepoolsed NDA-d allkirjastatud) - Mobiilne vestluspind —
ChatThreadsView(rolli-põhiselt redigeeritud loend) +ChatThreadView(Ionic mullid, küsimine, optimistlik koostaja);NdaSignViewlisab „Ava vestlus" otselingi pärast seda, kui kutsuja on ise oma NDA allkirjastanud - Server-otspunktid —
GET /api/me/chat/threads,GET /api/me/chat/threads/:id/messages(kursori-leheküljestus),POST …/messages(teavitab vastaspoolt; kui adressaat on tööandja, teavitatakse kõiki aktiivseid organisatsiooni omanikke eraldi) - Administraatori veebirakenduse vestluse vaatleja —
/admin/chatindeks +/admin/chat/[id]transkript, väravatudrequireAdmin-iga (globaalse-skoobigauser_role_assignmentsrida →adminslug); identiteet jääb vastavusrolli jaoks redigeerimata - Rolli-põhine isiku-redaktsioon taaskasutab
engagementDetail.computeIdentityUnlocked-i, nii et vestluse käepidemed klapivad engagement detailivaate paljastamise olekuga - Testid —
chatThread.test.ts(9 juhtumit kinnitavad vastaspoole-käepideme redaktsiooni-maatriksit); ET + EN i18n stringid - Tarnitud versionCode 13 / 1.0.12 (236 → 245 läbinud üle 20 faili)
Faas 13 · Operatsioonid ja edasi-lükatud ⏸️
- iOS levitus — tasuline Apple Developer konto + IPA torustik + TestFlight;
version.get.tsjuba pakubios{code,name,url}blokki - Võtmehoidla varundus eemal arvutist —
apps/mobile/android/skillhub-release.keystore+keystore.properties1Password / krüpteeritud USB-le (mõlemad gitignored; kaotus = võimaluse kaotus samaapplicationId-d kasutada) - Tõlgi §29 – §32 inglise keele PROJECT_REFERENCE-ist (ET fail seni §28-l)
- OneSignal APNs / FCM sild alternatiivina otse FCM v1-le
- Töötaja kodu vs tööandja töölaud (sügavam KPI)
- [-] 🛑
GET /api/me/worker-profile/payouts— Stripe Connect EoR-i ulatusest välja võetud (SkillHub maksab palga kaudu) - [-] 🛑 Vana „Build + bump v1.0.6" samm (nüüd 5 versiooni tagasi)
Faas 14 · Suunamisprogramm (€1/h × 3 kuud, marginaalist rahastatud) ✅ tarnitud (v1.0.13) — väljamakse-torustik ootab Faas 12 Lõik 5
Investori narratiiv §B.1 / §D.1 — peamine pakkumismootor. Töötaja, kes registreerub ja täidab profiili, saab suunamislingi; kui tema poolt suunatud sõber registreerub selle lingi kaudu (veeb või Android / iOS äpp) ja täidab oma profiili, siis järgmise 3 kuu jooksul iga kord, kui SkillHubi klient palkab suunatava töötaja, teenib suunaja €1 iga kinnitatud töötunni eest. Preemia makstakse platvormi marginaalist, ei lahutata kunagi suunatava palgast (§D.1 — tööõiguslikult puhas NL / DE / FR / PL).
- R14.1 — skeem tarnitud (
packages/db/src/schema/referrals.ts, migratsioon0021_*):referral_codes(üks aktiivne kood suunaja kohta; UNIQUE veerulcode) +referral_attributions(üks omistamine suunatava kohta — UNIQUE veerulworker_profile_id— suunaja + kood +attributed_at+expires_at=+90 päeva, anti-enese-suunamine jõustatud kirjutamise ajal). - R14.2 —
referral_payoutspearaamat tarnitud: üks rida iga kinnitatud-tundide partii kohta, võti(attribution_id, engagement_id, period_start, period_end)UNIQUE et aja-kinnitamise torustik saaks turvaliselt taasesitada; täisarvamount_minorsendid,currencyISO-4217, ainult auditeeritav. - R14.3 —
GET /api/me/referrals(aktiivne kood + eluaegsed statistikad + omistamiste ajalugu, kus PII on redigeeritud ainult ajatemplitele + olekumärkidele, mitte kunagi nimedele/e-postidele) jaPOST /api/me/referrals/code/regenerate(idempotentne: tagastab olemasoleva aktiivse koodi kui see on, muidu mintib uue). - R14.4 — omistamise lukustus profiili-lõpetamise hetkel. Veebi (
apps/web/app/utils/referralCapture.ts) ja mobiili (apps/mobile/src/utils/referralCapture.ts) püüdjad loevad?ref=CODEkäivitus-URL-istlocalStorage-isse ja kordavadPOST /api/me/referrals/attributekutset igal/api/mevärskendusel — kui töötaja jõuab 100 %profileCompleteness-i, lukustub omistamine. Aegunud / tundmatu / kehtetu kood vaikiv mittetehtav (parima-jõu lahendamine §D.1 järgi). - R14.5 — väljamakse-arvutuse hook (
createReferralPayoutForConfirmedHoursabistaja kooscomputePayoutAmountMinor-iga ja idempotentsus-võtmega) on olemas — haakutus aja-kinnitamise torustikku + 24 h palgafondi SEPA väljaminemine ootab Faas 12 Lõik 5 (geofencitud aja-jälgimine). - R14.6 — jagamis-lingi UX tarnitud:
apps/mobile/src/views/ReferralsView.vueWeb Share API + lõikepuhvri tagasilangusega (@capacitor/share+navigator.clipboard), eluaegne väljamakse riba ja suunatavate kaupa ajatelg (ajatemplid + olekumärgid, ilma nimede / e-postideta).HomeView-l promo-kaart igale töötajale, kellel on null omistamist. - R14.7 — admini pind tarnitud:
GET /api/admin/referrals+apps/web/app/pages/admin/referrals/index.vue, kuvab suunaja-kohase ajaloo, aktiivse koodi, omistamiste arvu, eluaegse väljamakse (minoorsetes ühikutes + valuuta) ja pettuse-märgid —self_referral(suunatav == suunaja) jaattribution_burst(≥ 4 omistamist mistahes 24 h liikuvas aknas).requireAdminvalvur taaskasutatud Faasist 12. - R14.8 — i18n EN + ET tarnitud; 18 uut vitest juhtumit
apps/web/tests/referrals.test.ts-s (generateCodepikkus / tähestik / mitte-mitmemõttelised märgid / eristatavus,computeAttributionExpiry90-päevane aken + monotoonsus,isAttributionActiveAtpoolavatud intervall,computePayoutAmountMinorümardamine + kohandatud määr + mitte-negatiivse-sisendi invariandid, lisaks konstantide kinnitused). 245 → 263 läbinud üle 21 faili. - R14.9 — avalikustamise sõnastus tarnitud
referrals.disclosure-s („Preemiat maksab SkillHub platvormi marginaalist. Seda ei lahutata suunatud töötaja palgast ega mõjuta tema töösuhet.") renderdatudReferralsView-l jagamis-nupu kõrval ja kodu-ekraani promo-kaardil. - R14.10 — jagamis-kuni-maandumise ahel suletud (v1.0.19). Mobiilne jagamine kirjutati ümber natiivsele
@capacitor/sharepluginale (varasemnavigator.shareoli Androidi WebView-s defineerimata ja kukkus vaikselt läbi clipboard-only-le, mistõttu „Jaga" tundus katki). Jagamise URL viidi üle aadressilehttps://skillhub.ee/join?ref=CODE. Uus avalik Nitro marsruutapps/web/server/api/referrals/resolve.get.tstagastab{ valid, referrerName, windowDays, bonusPerHourMinor, bonusCurrency }— suunaja nimi redigeeritud uue puhta abi-funktsioonigaformatReferrerHandlekujule „Tiit T." (peegeldabchatThread.counterpartyHandleredigeerimist), nii et leht ütleb „Tiit T. kutsus sind SkillHubi" ilma perekonnanime lekitamata. Uusapps/web/app/pages/join.vuekuvab kolme haru: anonüümne + kehtiv → tervitus + kolme-sammuline alustamine (konto → identiteet → ameti avaldamine) + €1/h avalikustamine + Androidi allalaadimise kaart; sisseloginud → preemia-N/A selgitus + töölaua CTA; kehtetu / rotateeritud / aegunud → graatsiline tagasilangus. EN / ET / DE / NLjoin.*i18n tarnitud. 8 uut vitest juhtumit kinnitavad nime-redigeerimise maatriksi (regression: täisperenimi ei lekita kunagi). - R14.11 — universaalsed sügav-lingid (v1.0.19).
AndroidManifest.xmllisabautoVerify="true"intent-filtri aadressilehttps://skillhub.ee/join; vastav Digital Asset Links avaldusapps/web/server/routes/.well-known/assetlinks.json.get.ts-s (release-allkirja SHA25675:FA:55:23:…:41, pakettee.skillhub.app, env-ülekirjutatav). iOS Universal Links:apps/mobile/ios/App/App/App.entitlementslisabapplinks:skillhub.ee+webcredentials:skillhub.ee; AASA serveeritudapps/web/server/routes/.well-known/apple-app-site-association.get.ts-st (ilma.jsonlaiendita,application/json, meeskonna-IDNUXT_IOS_TEAM_IDkaudu).apps/mobile/src/App.vuehandleAppUrllaiendatud: püüab?ref=mistahes sissetulevast URL-ist, seejärel suunab anonüümsed kutsujad lehelesign-in, kui URL onhttps://skillhub.ee/joinUniversal/App Link; olemasolev 100 %-profiili omistamise vaatleja sulgeb ahela hetkel, kui uus töötaja registreerumise lõpetab.
29.3 Kinnitatud invariantid
Need reeglid on viidatud §9-le, §15.2-le, §31-le (EN-versioonis) — kordame siin, et nad ei triiviks:
- Töötajad ei näe kunagi kliendi arvelduse hinda, tööandja palgakulu ega platvormi marginaali.
- Kliendid ei näe kunagi töötaja brutotunni- ega platvormi marginaali.
- Identiteedi avamine on rolli-põhine: kutsuja näeb vastaspoole isikuandmeid hetkel, mil ta on allkirjastanud oma kahepoolse Platvormi NDA SkillHubiga (töötaja ↔ SkillHub või klient ↔ SkillHub). Teine pool jääb oma vaates anonüümseks, kuni allkirjastab oma NDA. Eellepingu faas nõuab endiselt mõlemat NDA-d enne allkirjastamise algust.
- Kogu finantsmatemaatika kasutab täisarvulisi minoorseid ühikuid (sente) — mitte kunagi ujukomaarve.
- SkillHub OÜ (Devskills OÜ, reg 17171697) on juriidiline tööandja (EoR); toote „tööandja" string viitab kliendile / üürivale ettevõttele.
- Lowball-tuvastus vähendab tööandja sisestatud määra 15% võrra enne hinnastamist; töötaja preemia lisab 10%; marginaali põrand on 18% (§9, §31.16 EN).
Muudatuste logi
| Kuupäev | Muudatus | Autor |
|---|---|---|
| 2026-04-24 | Dokument loodud. Plaanid lukustatud strateegiale, tehnoloogiavirnale, kasutajatüüpidele, andmebaasi domeenidele, disainifilosoofiale, AI-kihile, GTM-ile. | Plaanimise sessioon |
| 2026-04-25 | Faasi 2 verstapostid kajastatud: Better Auth magic-link, AI Arhitekt, Vectorize + bge-m3 semantiline sobitus, sobituse püsivus (D1 + KV), tootmise seeme elus. §16 virn ümberkirjutatud manuste + arutluse jaotuseks; §17 repo-paigutus uuendatud worker-web-i kaotamiseks (nii web kui mobile kannavad kõiki rolle); uus §28 Teostuse seis. |
Töösessioon |
| 2026-04-25 | apps/mobile raamistatud ja käivitatav iOS-il + Androidil: Ionic Vue + Capacitor 8, magic-link OTT-sild, /api/me/shifts + kutse-vastuse endpoint-id, ET/EN i18n. Mobiili disainikeel formaliseeritud — AppScreen kest, sh-tile algprimitiiv, pesastatud kaarte pole, screen-pad / stack märgid variables.css-is. §28.4 lisatud; §28.5 / §28.6 ümber nummerdatud. |
Töösessioon |
| 2026-04-25 | Lisatud Eesti tõlge (PROJECT_REFERENCE.et.md). /reference leht edastab nüüd aktiivse i18n-keele; serverirada (server/api/reference.get.ts) valib õige variandi virtuaalsest moodulist ja taandub vajadusel inglise keele algallikale. |
Töösessioon |
| 2026-04-26 | §28.6 sai vue-i18n reserveeritud märkide reegli (@ tuleb lokaalifailides kirjutada kujul {'@'}, muidu viskab sõnumikompilaator mountimisel SyntaxError: 10 ja ekraan renderdub tühjana). |
Töösessioon |
| 2026-05-09 | §29 Teekaart ja ülesannete jälgija lisatud — koondab [Edited_04_28,_09_07_PM]_Workforce_Rental_Platform_Planning_*.md ja Profile_Profession_Iteration_Fixes_*.md ühte kakskeelsesse elavasse kontroll-loendisse. 13 faasi grupeeritud teemapõhiselt, kokku-pandavad accordion-sektsioonid, seisundi-legend (✅ / 🚧 / ⏭️ / ⏸️ / 🛑), ülevaatlik tabel ülaosas. Kinnitatud invariandid (privaatsus, minoorsed ühikud, EoR identiteet) korratud, et nad ei triiviks. Vastav inglise keele jaotis on §32 docs/PROJECT_REFERENCE.md-s. |
Töösessioon |
| 2026-05-09 | Kasutajateekonnad — asutaja narratiiv lisatud dokumendi algusesse (§1 kohale) äriplaani ja investorile esitletava deki alusena. Neli osa (A. Klient, B. Töötaja, C. Admin) käivad elutsükli läbi tavalises proosas; D. Vastuväited toob esile suunamise rahastamise marginaalist (mitte töötaja palgast), riigi-malliseeritud eellepingu pikkuse, partnerkooli verifitseerimise skaleerimise, AI-vestluse GDPR-avalikustamise, kahe NDA järjekorra tihendamise, peatamise lävendite selgesõnastamise ja ⭐-taseme esiletoomise. E. Katvuse kaart kaardistab iga teekonna sammu §29 faasi staatusele. Sisukorda lisatud uus täpp; samaaegselt parandatud /reference lehe vasaku-veeru indeksi kerimine (apps/web/app/pages/reference.vue + main.css .sh-toc-scroll), nii et indeks saab iseseisvalt kerida, kui sisu ületab vaateakna kõrguse. Inglise dokumendi peegelpilt uuendatud. |
Töösessioon |
| 2026-05-09 | Mobiili splash-i lihv + reference-lehe testid. apps/mobile/src/components/SkillHubLogo.vue ümberkirjutatud sõnamärgi SVG-d sissekirjutama: Skill-rühm + tsüaan-märk lukustatud brändi #22acd3 külge, Hub-rühm üle viidud currentColor-ile, nii et sõnamärk pöördub prefers-color-scheme järgi tumeda režiimi all peaaegu mustaks (#0a0a0c) heleda pinna peal ja peaaegu valgeks (#f5f5f7) tumeda pinna peal — lahendab tumeda režiimi seadmetes „ainult Skill on näha" regressiooni. SplashView.vue säraefekti ülekate nüüd SkillHubi siluetile maski-järgi piiratud (mask-image: url('/skillhub-logo.svg')); gradient libiseb animeeritud background-position-iga, mitte transform-iga, nii et säri liigub mööda tähekujusid, mitte üle nelinurkse konteineri. Reference-lehe TOC-parser eraldatud apps/web/app/utils/referenceToc.ts-i (parseReferenceToc, slugifyHeading); leht tarbib seda jagatud abistajat, nii et külgriba ankrud ja töövoo-aegsete <h2>/<h3> id-d jagavad ühte tõe-allikat. Uus apps/web/tests/referenceToc.test.ts lisab 13 testjuhtumit (slugi-valem, laiendatud-ladina säilitamine, taseme-filter, allika-järjekord, pluss regressiooni-väide, et kleepuv külgriba säilitab max-h-[calc(100vh-7rem)] + overflow-y-auto + sh-toc-scroll). 223 → 236 läbinud üle 19 faili. Inglise dokumendi peegelpilt uuendatud. |
Töösessioon |
| 2026-05-09 | v1.0.12 (versionCode 13) — Faas 12 / Lõik 4 vestlus + administraatori järelevalve tarnitud. chat_threads skeem (packages/db/src/schema/communications.ts) saab engagement_id tekstiveeru + 'engagement' liigi diskriminaatori; migratsioon 0020_elite_next_avengers.sql. engagementProgress.ensureEngagementChatThread loob lõime idempotentselt esimesel korral, kui engagement jõuab pending_engagement_contracts-i (mõlemad kahepoolsed NDA-d allkirjastatud), nii et pind on saadaval kohe, kui pooled võivad isikutuvastust jagavaid andmeid vahetada. Kolm uut kutsuja-otspunkti: GET /api/me/chat/threads (rolli-põhiselt redigeeritud loend — counterpartyHandle tagastab üldise Client/Worker, kuni kutsuja on ise oma Platvormi NDA allkirjastanud, seejärel töötajatele Acme Construction ja tööandjatele Eesnimi P.), GET /api/me/chat/threads/:id/messages (kursori-leheküljestus, kasvavalt sent_at järgi), POST …/messages (lisab + uuendab last_message_at + notify()-b vastaspoolt; kui adressaat on tööandja, teavitatakse iga aktiivset organisatsiooni omanikku eraldi). Kaks ainult-loetavat administraatori marsruuti (/api/admin/chat/threads + …/:id/messages) väravatud uue requireAdmin abistajaga, mis otsib globaalse-skoobiga user_role_assignments rida, mis viitab admin slug-ile; identiteet jääb vastavusrolli jaoks redigeerimata. Mobiil tarnib ChatThreadsView.vue + ChatThreadView.vue (Ionic mullid, automaatne kerimine, kerge nähtavuse-muutuse-põhine küsimine, optimistlik koostaja); NdaSignView lisab „Ava vestlus" otselingi, kui kutsuja on ise oma NDA allkirjastanud. Veebi administraator tarnib apps/web/app/pages/admin/chat/{index,[id]}.vue töötaja-vs-tööandja mulli-paigutusega. Uus apps/web/server/utils/chatThread.ts keskendab osaleja-lahenduse + redaktsiooni; apps/web/tests/chatThread.test.ts lisab 9 juhtumit, mis kinnitavad vastaspoole-käepideme maatriksi (töötaja lukus → Client, töötaja avatud → kaubandusnimi, tööandja avatud → Eesnimi P., regressioon: töötaja vaade ei lekke kunagi töötajale ta enda juriidilist nime; tööandja vaade ei lekke kunagi organisatsiooni kaubandusnime tagasi). Loogiline (mitte DB-tasandi) FK engagement_id-le, et vältida tsüklilisi skeemi-importe — terviklikkus jõustatakse rakenduse-kihis, kus loomine on ainus kirjutaja. 236 → 245 läbinud üle 20 faili. Inglise dokumendi peegelpilt uuendatud. |
Töösessioon |
| 2026-05-10 | v1.0.13 (versionCode 14) — Faas 14 suunamisprogramm tarnitud läbi-aegselt (R14.1–R14.4, R14.6–R14.9; R14.5 SEPA torustik ootab Faas 12 Lõik 5). Uus skeem packages/db/src/schema/referrals.ts-s (migratsioon 0021_*): referral_codes (üks aktiivne kood suunaja kohta; UNIQUE veerul code), referral_attributions (üks omistamine suunatava kohta — UNIQUE veerul worker_profile_id — suunaja + kood + attributed_at + expires_at = +90 päeva, anti-enese-suunamine jõustatud kirjutamise ajal), referral_payouts (ainult auditeeritav pearaamat võtmega (attribution_id, engagement_id, period_start, period_end) UNIQUE turvaliseks aja-kinnitamise taasesituseks, täisarv amount_minor sendid). Serveri-abistajad apps/web/server/utils/referrals.ts-s: generateCode (Crockford-stiilis 30-täheline tähestik, mitmemõttelised I/L/O/U välja jäetud; 8-täheline kood), getOrCreateActiveReferralCode, regenerateReferralCode, attributeReferralIfPossible (vaikiv aegunud / tundmatu / kehtetu / enese-suunamise / juba-omistatud puhul; lukustub ainult kui suunatav jõuab 100 % profileCompleteness-i), createReferralPayoutForConfirmedHours (idempotentne pearaamatu lisamine), pluss puhtad abistajad computeAttributionExpiry, isAttributionActiveAt, computePayoutAmountMinor. Kolm kutsuja-otspunkti: GET /api/me/referrals (aktiivne kood, eluaegne paidMinor/currency, omistamiste ajatelg — ainult ajatemplid + olekumärgid, ei ekspordi kunagi suunatavate nimesid / e-poste vastavalt §32.3 PII-vahile), POST /api/me/referrals/code/regenerate, POST /api/me/referrals/attribute (kutsutud auto-püüdmise voo poolt; tagastab profile_incomplete kuni 100 %-ni). Veebi + mobiili püüdmis-utiliidid (apps/web/app/utils/referralCapture.ts, apps/mobile/src/utils/referralCapture.ts) loevad ?ref=CODE käivitus-URL-ist localStorage-isse ja kordavad attribute-kutset igal /api/me värskendusel — pendeldav võti puhastatakse edu või mistahes mitte-profile_incomplete ebaõnnestumise korral. Mobiil tarnib ReferralsView.vue (jagamis-nupp → Web Share API + lõikepuhvri tagasilangus @capacitor/share-iga, eluaegse väljamakse riba, omistamise ajaloo loend) pluss promo-kaardi HomeView-l igale töötajale, kellel on null omistamist; täielik EN + ET i18n koos §D.1 avalikustamisega („Preemiat maksab SkillHub platvormi marginaalist. Seda ei lahutata suunatud töötaja palgast ega mõjuta tema töösuhet."). Admini pind: GET /api/admin/referrals + apps/web/app/pages/admin/referrals/index.vue, kuvab suunaja-kohase ajaloo, eluaegse väljamakse ja pettuse-märgid (self_referral, attribution_burst = ≥ 4 omistamist mistahes 24 h liikuvas aknas). 18 uut vitest juhtumit apps/web/tests/referrals.test.ts-s kinnitavad konstandid (90-päevane aken, €1.00/h minoorsetes ühikutes), koodi-genereerimise tähestik + pikkus + mitte-mitmemõttelisus, aegumise matemaatika, poolavatud aktiivse-juures piir ja väljamakse ümardamine (1 min → 2 c, 2 min → 3 c, 30 min → 50 c, 60 min → 100 c). 245 → 263 läbinud üle 21 faili. Inglise dokumendi peegelpilt uuendatud. |
Töösessioon |
| 2026-05-10 | Avalehe slogani lihv + mitme-pakkuja sisselogimise alustala. apps/mobile/src/i18n/locales/{en,et}.json splash.slogans ümberkirjutatud Paari 3 peale — EN: „Short on hands? Post the order." / „Crew on site. Contract on your phone."; ET (idiomaatiline, mitte sõna-sõnalt): „Käsi puudu? Pane töö üles." / „Tiim platsil. Leping telefonis." apps/mobile/src/components/SocialButton.vue laiendatud neljanda mobile-id pakkuja variandiga; Apple + Google logod normaliseeritud 22 × 22 kasti, et neil oleks sama optiline kaal; Smart-ID üle viidud läbipaistvale pinnale + brändi-tsüaani (#1a8bad) raamile + sildile, koos SK ID Solutionsi tirkiisi-märgi platsihoidja-lähendusega (asenda litsentseeritud varaga vastavalt docs/MOBILE_LOGIN.md §10.3-le); Mobiil-ID järgib sama geomeetriat, kuid musta raami + sildiga ja värvilise id.ee-stiilis platsihoidja-märgiga. SignInView.vue paljastab uue nupu (auth.social.mobileId stringid lisatud mõlemas keeles). Better Auth saab varem dokumenteeritud, kuid mitte-koodistatud account.accountLinking: { enabled: true, trustedProviders: ['apple', 'google'], allowDifferentEmails: false } poliitika apps/web/server/utils/auth.ts-i. Uus deterministlik abistaja apps/web/server/utils/identityLink.ts omab PNO sidumise otsust (`decidePnoLink → 'sign-in' |
'attach' |
| 2026-05-10 | Sisselogimise pinna lihv + Dokobit-vs-SK analüüs. apps/mobile/src/components/SocialButton.vue: kõik neli pilli ühtlustatud 1 px Apple-paksusele inset-raamile; hele teema — Apple, Google ja Mobiil-ID jagavad sama rgb(0 0 0 / 0.10) juuksekarva-piiri (Smart-ID hoiab brändi-tirkiisi #00afaa, et litsentseeritud märk püsiks ankurdatud valgele lõuendile); tume teema — Smart-ID saab oma brändi-sinise täidise (var(--sh-grad-brand)) tagasi ja selle ikoon-rajad värvuvad valgeks koos sildiga fill="currentColor" kaudu. Smart-ID ja Mobiil-ID inline-SVG-de platsihoidjad asendatud SK ID Solutionsi / id.ee ametlike brändi-märkidega, vahemällu salvestatud kausta apps/mobile/public/{smart-id,mobile-id}.svg. Logo invariant: iga ikoon renderdatakse samal 22 px optilisel kõrgusel (.sh-social__icon { height: 22px }; SVG-d kasutavad height="22" ilma laiuse atribuudita, nii et kuvasuhe tuleb viewBox-ist — Mobiil-ID kaardistiilis märk on seetõttu pisut laiem kui ruudukujulised Apple / Google / Smart-ID märgid). apps/mobile/src/theme/variables.css tõstab --sh-hairline-i rgb(0 0 0 / 0.06) → 0.12 heles teemas ja rgb(255 255 255 / 0.08) → 0.18 tumedas teemas, et iga SHField-i kontuur (ja OR / VÕI jagaja, mis pärib sama tokenit) oleks selgelt loetav mõlemas teemas; hõljuv vahekaardi-saareke pole mõjutatud, kuna see kasutab eraldi --sh-glass-border tokenit. Dokobit Identity migratsiooni jaoks pole veel koodi — ainult analüüs: SK Eesti hinnakirjas (Smart-ID Plaan I €55/kuus + Mobiil-ID Plaan I €30/kuus = €85/kuus põhi, tõuseb €93/kuus alates 2026-06-01) tasub otseintegratsioon ennast ära alles üle ~5 k autentimise/kuus; Dokobit ühe-lepingu Identity API (juba kaetud Platvormi NDA tee eest tasutuga) hoiab muutuva transaktsiooni-kulu kõrgemana, kuid kõrvaldab teise mTLS-i, teise RP UUID-i ja EE-ainult Mobiil-ID lünga (Läti töötajad saavad Smart-ID + Läti eID tasuta peale). Soovitus kinnitatud docs/MOBILE_LOGIN.md-s järgmise lõigu täideviimiseks. |
Töösessioon |
| 2026-05-15 | v1.0.19 (versionCode 20) — Faas 14 suunamis-lingi ots-otsani ahel (R14.10 + R14.11). Mobiilne jagamis-nupp kirjutati ümber natiivsele @capacitor/share pluginale (pnpm add @capacitor/share); varasem navigator.share kutse oli Androidi WebView-s defineerimata ja kukkus vaikselt läbi clipboard-only-le — see oli põhjus, miks „Jaga" tundus kasutajale katki. Jagamise URL viidi üle ülddomeeni indeksilt sihtotstarbelisele https://skillhub.ee/join?ref=CODE maandumislehele. Uus avalik Nitro marsruut apps/web/server/api/referrals/resolve.get.ts tagastab { valid, referrerName, windowDays, bonusPerHourMinor, bonusCurrency } — suunaja nimi redigeeritud kujule „Tiit T." uue puhta abi-funktsiooniga formatReferrerHandle(legalFirstName, legalLastName, fallbackName), nii et leht loeb „Tiit T. kutsus sind SkillHubi" ilma suunaja perekonnanime lekitamata (peegeldab chatThread.counterpartyHandle redigeerimist). Uus apps/web/app/pages/join.vue kuvab kolme haru: anonüümne + kehtiv → tervitus + kolme-sammuline alustamine (konto → identiteet → ameti avaldamine) + €1/h avalikustamine + Androidi allalaadimise kaart; sisseloginud → preemia-N/A selgitus + töölaua CTA; kehtetu / rotateeritud / aegunud → graatsiline tagasilangus. EN / ET / DE / NL join.* i18n tarnitud (tervitus, kolm sammu, sisseloginud, kehtetu, allalaadimine). Universaalsed sügav-lingid: AndroidManifest.xml lisab autoVerify="true" intent-filtri aadressile https://skillhub.ee/join, nii et puudutused mistahes Androidi jagamis-paneelist avavad rakenduse otse; vastav Digital Asset Links avaldus apps/web/server/routes/.well-known/assetlinks.json.get.ts-s (release-allkirja SHA256 75:FA:55:23:…:41, pakett ee.skillhub.app, env-ülekirjutatav). iOS Universal Links: apps/mobile/ios/App/App/App.entitlements lisab applinks:skillhub.ee + webcredentials:skillhub.ee; AASA serveeritud apps/web/server/routes/.well-known/apple-app-site-association.get.ts-st (ilma .json laiendita, application/json, meeskonna-ID NUXT_IOS_TEAM_ID kaudu — vaikimisi platsihoidja, kuni Apple Developer registreerimine valmib). apps/mobile/src/App.vue handleAppUrl laiendatud: püüab ?ref= mistahes sissetulevast URL-ist, seejärel suunab anonüümsed kutsujad lehele sign-in, kui URL on https://skillhub.ee/join Universal/App Link; olemasolev 100 %-profiili omistamise vaatleja sulgeb ahela hetkel, kui uus töötaja registreerumise lõpetab. 8 uut vitest juhtumit apps/web/tests/referrals.test.ts-s kinnitavad nime-redigeerimise maatriksi (täisnimi → „First L.", puuduvad osad, tagasilangus users.name-i lõhestamisele, üldine platsihoidja, regression, et täis-perekonnanime ei ekspordi kunagi). Versiooni-manifesti vaikeväärtused tõstetud 20 / 1.0.19-le. Inglise dokumendi peegelpilt uuendatud. |
Töösessioon |
| 2026-05-10 | v1.0.14 (versionCode 15) — Smart-ID + Mobiil-ID esmase-faktori sisselogimine tarnitud läbi-aegselt. Server: uued /api/auth/{smart-id,mobile-id}/{start,status,complete} marsruudid apps/web/server/utils/eidSignIn.ts peal, mis mähib decidePnoLink-i ja vermib Better Auth bearer-tokeni sign-in harul (tagastab 404 account_not_found, kui PNO-l pole veel e-posti kontot, 409 conflict, kui see põrkub teise sisseloginud kasutajaga). Sidumise kolmik /api/me/{smart-id,mobile-id}/{start,status,complete} jätkab kirjutamist kutsuja users reale nagu varem. apps/web/server/utils/identityGate.ts requireVerifiedIdentity() viskab 403 identity_verification_required ja on rakendatud POST /api/me/worker/specialties ja POST /api/me/employer/orders/:id/hire-requests peale. apps/web/server/utils/certSubject.ts lisab parsePnoFromCertSubject + stripPnoPrefix; POST /api/me/platform-nda/complete kinnitab nüüd, et Dokobiti sertifikaadi subjekti PNO võrdub users.nationalIdentificationNumber-iga (422 mittevastavuse puhul; stub/demo režiim läbib). PATCH /api/me/employer-org tuletab nüüd peamise esindaja national_id-i serveri poolelt kutsuja kinnitatud identiteedi reast — patch-skeem (ja selle sisemine representative objekt) on mõlemad nüüd .strict(), nii et keha ei saa seda kunagi võltsida. Mobiil: uus ühtne IdentityVerifyView.vue (marsruut verify-identity) asendab vana SmartIdView.vue, juhib mõlemat pakkujat ja mõlemat režiimi (sisselogimine / sidumine) läbi apps/mobile/src/stores/eidAuth.ts — Pinia oleku-masin (idle → starting → waiting → done|error) pakkuja-teadliku vea-kaardistamisega (refused, timeout, accountNotFound, conflict, generic); EidPinModal.vue kuvab 4-kohalise kinnituskoodi ja polli-oleku; IdentityRequiredCard.vue lisab Avalehe-vahekaardi banneri (tööandja + töötaja variandid), kui auth.profile?.identityVerifiedAt on null. SignInView.vue Smart-ID + Mobiil-ID nupud ei näita enam „Coming soon" tooste — nad lükkavad ühtsesse voogu; apps/mobile/src/stores/auth.ts viskab vananenud startSmartId/pollSmartId/completeSmartId kolmiku välja. EN + ET eid.* ja identityRequired.* i18n võtmed lisatud. Testid: 6 uut vitest juhtumit apps/mobile/tests/eidAuth.test.ts-s (oleku-masina üleminekud + vea-kaardistamine); 10 uut juhtumit apps/web/tests/certSubject.test.ts-s (koma- + kaldkriipsuga DN, kriipsuta variant, LV/LT, vigane PNO, mittetoetatud riik, eesliite eemaldamine); 2 uut juhtumit apps/web/tests/employerOrgPatch.test.ts-s (range-režiim lükkab tagasi nationalId / personalCode esindaja-keha peal). docs/MOBILE_LOGIN.md laiendatud „Shipped in v1.0.14" demo-vs-prod maatriksiga ja uue §10.6-ga, mis katab identiteedi-värava. 286 → 298 läbinud veebi poolel; mobiili komplekt 46 läbinud. Inglise dokumendi peegelpilt uuendatud. |
Töösessioon |
| 2026-05-09 | Asutaja resolutsioonid §D vastuväidetele lukustatud. §D ümberkirjutatud „avatud küsimustest" „Lukustatud otsusteks": (1) suunamispreemia makstud platvormi marginaalist (ei lahutata kunagi töötaja palgast), (2) lame 1-nädalane eelleping vaikimisi, soovi korral läbiräägitav iga lepingu kohta EE käsunduslepingu alusel, riigipõhised mallid lükatud käivitamise lõikudesse, (3) algul majas, hiljem partnerkoolid, (4) GDPR-vastav AI-vestluse järelevalve (Art. 13 banner esimesel vestluse avamisel + Art. 17 kustutamise kanal), (5) rolli-põhine isiku-avamine — kutsuja enda Platvormi NDA avab vastaspoole isikuandmed talle; asendab kahepoolse allkirja-lukku, (6) §13 peatamise lävendid toodud kasutaja-pinnale, (7) ⭐ tase voolab hinnamootorisse, lisatud töötaja-teekonda B.10. Kood: computeIdentityUnlocked eraldatud engagementDetail.ts-is, /api/me/engagements/:id üle viidud dualSigned-ist rolli-põhiseks; 4 uut testi (219 → 223 läbinud). §29.3 invariant #3 ümberkirjutatud; §29.1 + §29.2 lisavad Faas 14 · Suunamisprogrammi esimese teekaardile-jälgitud sissekandena §B.1 pakkumismootorile. Inglise dokumendi peegelpilt uuendatud. |
Töösessioon |