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

  1. Identiteet
  2. Visioon ja lifti-pitch
  3. Turuanalüüs
  4. Konkurents
  5. Strateegiline positsioneerimine
  6. Kümme häirimisteljet
  7. Platvormi ulatus — mida me teeme ja mida mitte
  8. Ärimudel
  9. Dünaamiline hinnamootor
  10. Palgafond ja varahaldus
  11. Sertifitseerimissüsteem
  12. Koolitusäri
  13. Usaldus — arvustused, vaided, blokeerimised
  14. Kuus suletud automatiseeritud silmust
  15. AI-kiht
  16. Tehnoloogiavirn
  17. Arhitektuur ja repositooriumi paigutus
  18. Kasutajatüübid ja rollimaatriks
  19. Andmebaasi domeenid ja tabelid
  20. Andmebaasi konventsioonid
  21. Disainifilosoofia
  22. Disainimärgid ja esteetilised reeglid
  23. Turule mineku plaan
  24. KPI-d
  25. Riskid ja maandused
  26. Teekaardi faasid
  27. Sõnastik
  28. Teostuse seis
  29. 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.

  1. 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.
  2. Sihtleht ja müügilehter. Pikk üheleheline (mobiili-esimene, veebi-peegeldatud) tutvustab platvormi võimekust ja kutsub korduvalt tegutsema.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.

  1. 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).

  2. Kiire registreerimine. Profiilipilt, linn, töötamise raadius, põhikontakt. Kasutaja saab kohe töölaua ligipääsu.
  3. Profiili värav. Kodulehe teavitus teatab, et erialaprofiile ei saa avaldada enne, kui isikuprofiil on 100% täidetud. Kasutaja juhitakse seda lõpetama.
  4. 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.
  5. 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.
  6. Eelleping. Teine allkirjastamise voog — projektipõhine ühenädalane eelleping SkillHubiga (vaikimisi; soovi korral läbiräägitav, vt §D.2). Sama Dokobit allkirjastamise rada.
  7. Objektil. Töötaja ilmub kokkulepitud asukohta ja käivitab äpis ajaarvesti (start / stopp). Klient peab olema loonud projekti / alamülesande ja määranud geopiiri.
  8. 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.
  9. 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.
  10. 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.

  1. 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.
  2. 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.
  3. 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.
  4. Ametid ja tööd. Vahekaardid avaldatud töötaja erialade ja tööandja tellimuste ülevaateks / filtreerimiseks / modereerimiseks, sealhulgas blokeerimise tegevus võltspostituste jaoks.
  5. 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.
  6. 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.

  1. 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).
  2. 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.
  3. 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.
  4. 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.
  5. 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_nda olekust 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).
  6. 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.
  7. ⭐ 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

  1. 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.
  2. Koolitusäri kui pakkumismootor — tasulised kursused toodavad pakkumist; konkurendid peavad selle ostma.
  3. 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.
  4. Dünaamiline regionaalne hinnamootor — EL-i sinikraede reaalajas hinnaindeks riigi × ameti × sertifikaadi astme × lojaalsuse × nappuse järgi. Avalikult nähtav.
  5. Automatiseeritud deposiit + 24-tunnine väljamakse — klient maksab platvormile → topeltkinnitatud tunnid → töötaja maksab 24 h jooksul. Pärandagentuurid maksavad 30–60 päeva.
  6. AI tööjõu arhitekt — klient kirjeldab projekti tavakeeles → AI pakub välja meeskonna (rollid, tasemed, tunnid, hind, ajakava).
  7. 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.
  8. Vaide-tribunal koos avalikult logitud otsustega — kvaliteet jõustab end ise; halvad osalised valivad end ise välja.
  9. Täielikult iseteenindav lepingustamine — vahetuse- või projektipõhine klikiläbi e-leping, riigipõhiselt lokaliseeritud, null telefonikõnesid.
  10. 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:

  1. Turuplatsi marginaal: dünaamiline 18–28% kliendi tariifist, läbipaistva vahemiku piires. Töötajad ja kliendid näevad mõlemad hinnaindeksit ja astmete arvutust.
  2. Koolituse õppemaks: €19 (sissejuhatus) → €79–€499 (kutserajad) → €29 kiirvalideerimine olemasolevatele professionaalidele. Tulujaotus 70/30 (meie/partner) partnerkooli sisule; 100% kui sisu meie oma.
  3. Sertifikaadi kontrollitasu (€29) töötajatele, kes laadivad üles olemasolevad sertifikaadid, mis möödavad meie kursusest.
  4. API / integratsiooniaste ettevõtte ERP-dele (Procore, PlanRadar, SAP SF): fikseeritud kuutasu + tasu väljakutse kohta.
  5. 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:
    1. Maksta töötajatele 24 h jooksul topeltkinnitatud tundidest, isegi kui klient pole veel arveldanud.
    2. Rahastada vaidetribunali tasusid (paneeli liikmed saavad palka).
    3. 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:
    1. Lõpeta platvormi kursus + eksam.
    2. Kiirtee: laadi üles olemasolevad tunnustatud sertifikaadid, kontrollitakse väljaandjate registrite vastu (certification_issuers).
  • Astme aegumine: sertifikaadid kannavad kehtivusaknaid certification_types.validity_months järgi. Uuendamise meeldetuletused saadetakse 90 / 30 / 7 päeva enne aegumist.
  • Ainus käsitsi platvormi samm: certification_reviewer roll. 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

  1. Nõudluse vastuvõtt — AI tööjõu arhitekt → struktureeritud shift_request.
  2. Sobitamine — taust-sobitaja → järjestatud match_candidates koos protsentidega.
  3. Lepingustamine — automaatselt loodud, riigipõhiselt lokaliseeritud e-leping, e-allkirjastatud.
  4. Teostus — geo-aiaga kella sisselöök + topeltkinnitatud tunnid.
  5. Arveldus — deposiit → palgafond → töötaja väljamakse → platvormi marginaal.
  6. 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_request reaks, 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 talletatakse match_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 currency veerg.
  • 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õi country_id tuleviku shardimise jaoks). D1 shardi marsruutimine määratletud shard_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:

  1. Ekraan on lõuend. Taust on pind. Interaktiivsed elemendid asetuvad selle peal, mitte sees pesastatud konteinerites.
  2. Minimaalne katmine. Pole virnastatud kaarte, pole ümarusega paneele ümarusega paneelides. Maksimaalselt üks visuaalse katmise tase.
  3. 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.
  4. Tugev kontrast, mitte kastid. Hierarhia tuleb tüübi skaalast, kaalust, ruumist ja värvist — mitte ristkülikute joonistamisest.
  5. Heldelt valget ruumi. Vähemalt 16 px välimine padding mobiilil; 24–32 px veebis; sisu ei puuduta kunagi serva.
  6. 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.
  7. Liikumine eesmärgiga. @vueuse/motion ainult oleku üleminekutele ja afordantsidele, mitte kunagi dekoratsioonile.
  8. Vaikimisi ligipääsetav. Minimaalselt WCAG AA kontrast iga elemendi peal; minimaalselt 44×44 pt puutealad; fookus nähtav; vähendatud-liikumine respekteeritud.
  9. Ü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

  1. Programmaatiline SEO (10 k+ pikasaba lehed linn × amet hinnaindeksist).
  2. Asutaja-juhitud LinkedIn-i sisu (ops / HR ostja persoona).
  3. Külmane väljaminek, mille konksuks on Tööjõu vajaduste analüüsija (mitte müügi-pitch — tasuta tööriist).
  4. Töötaja-poole TikTok / YouTube Shorts päris teenistus-kviitungitega.
  5. Erialaajakirjandus-PR (NL: Cobouw; DE: Bauindustrie; PL: Muratorplus).
  6. Kutsekoolide + ametiühingute partnerlused (kogus-sertifikaadi konveier).
  7. 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/web juurutatakse Cloudflare Pages-ile iga main-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. /welcome post-sisselogimine määrab rolli /api/me/ensure-role kaudu. Magic-linki saatmine Resend-i kaudu kinnitatud skillhub.ee saatedomeenilt (info@skillhub.ee).
  • AI tööjõu arhitekt: /request leht vestleb Anthropic Claude'iga /api/ai/architect kaudu, väljastab range valideeritud shiftRequestDraft (zod) ja renderdab struktureeritud eelvaate.
  • Semantiline sobitamine: /api/match manustab kavandi bge-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_values D1-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: /reference renderdab 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/i18n v10 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 suunab skillhub://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 loob shift_assignments rea.
  • i18n: ET (vaikimisi) + EN paarsus veebiga.
  • Mobiili disainikeel: üksainus AppScreen kest (poolläbipaistev tööriistariba, suur hero-pealkiri, --sh-screen-pad: 20px), uuesti kasutatav sh-tile algprimitiiv (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 elavad apps/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 radaPOST /api/workers, et luua worker_profile + lükata manused Vectorize-i (kasutades uuesti seedWorkerPool-i upsert-abimeest).
  • Kliendi onboardingorganizations + organization_members loomis-voog veebis.
  • Vahetuse-tellimus → avaldatud vahetus — muuda püsivaks salvestatud sobitus shift_requests reaks + shifts + shift_invitations koos match_request_id lü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äringuajal event.context.cloudflare.env-ist, mitte kunagi runtimeConfig-ist — Cloudflare Pages ei avalda projekti saladusi build-runner-ile.
  • Vectorize-i metaandmete indeks homeCountryIso2 on loodud; lisa veel (nt hasForkliftCert), kui filtritavad pakkumisnõuded ilmuvad.
  • vue-i18n reserveeritud märgid@, {, }, | on sõnumistringides reserveeritud (lingitud sõnumid, nimega interpolatsioon, mitmus). Et lisada ükskõik millisesse apps/web/i18n/locales/*.json või apps/mobile/src/i18n/locales/*.json lokaalifaili literaalne @ (nt e-posti placeholder), kirjuta see kujul {'@'}. Paljas @ põhjustab komponendi mountimisel sõnumikompilaatorist SyntaxError: 10 ja 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.md jää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)
  • /reference marsruut + 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.ee kohandatud 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/haptics kerge 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-login kaudu (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_profile JSON-veerg worker_specialty_profiles peal
  • 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/orders loend + 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
  • shiftRequestDraft laiendused (graafik / tööriistad / IKV / hierarhia)
  • Etapp 1 — Vectorize meelde tuletamine (querySpecialtyVectors, kind=specialty filter)
  • Etapp 2 — deterministlik järjestaja (specialtyRanker.ts: kõvad filtrid + kaalutud skoorimine; haversine geo)
  • Etapp 3 — Claude rerank (matchRerank.ts: prompti redaktsioon, segatud 0.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)
  • lastMatchedAt näitamine kandidaadi-lehel
Faas 6 · Palkamissoovi-voog + teavitused
  • hire_requests tabel + 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 (notifications tabel, notify() server-sissepääs, /api/me/notifications + :id/read)
  • device_tokens tabel + /api/me/device-tokens + Capacitor push registratsioon
  • FCM v1 dispetšer (RS256 JWT Web Crypto kaudu, OAuth2, UNREGISTERED tunnused märgitakse aegunuks); APNS haru järelejäänud
  • Sobituse-tulemuse tagasiside (setMatchCandidateOutcome kutse / vastuvõtu / keeldumise korral)
  • Profiili täielikkuse värav blokeerib eriala avaldamise kuni worker_profile on 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.keystore genereeritud
  • Veebi-kogum + cap sync + assembleRelease (JDK 21 Android Studio-st)
  • R2 ämber skillhub-downloads + allkirjastatud APK üleslaadimine
  • /downloads leht ühendatud avaliku R2 URL-iga
  • /api/mobile/version otspunkt (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_at worker_profiles-il, worker_verification_requests tabel, VerifiedBadge komponent, kandidaadi-kaardi + nav-pesa, VerifiedInfoView (/verified-info), kodu-promokaart
Faas 9 · Lõik 1 — Töösuhted + Töötajate vahekaart (v1.0.9)
  • engagements skeem + migratsioon (elutsükli FK-d, staatuse enum, allkirja ajatemplid)
  • OfferBriefView gradient-hoiatuskaart (Vastuvõtt = mittesiduv → NDA → prooviperioodi leping)
  • Töötaja vastuvõtt loob engagements rea + 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_profiles seeme (33% sotsiaalmaks, 0,8 / 1,6% töötuskindlustus, 20% TuMS, 700 € maksuvaba miinimum, 24% KM, II samba opt-in)
  • rate_index_entries Eesti 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_rates reale palkamissoovi vastuvõtul (idempotente; ebaõnnestumine pole fataalne)
  • Engagement detaili hinnaplokk — töötajale worker_gross, tööandjale client_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.1platform_nda_contracts + vanemate FK-veerud; migratsioon 0019 (loogilised viidad; D1 mitme-rebuild piirang dokumenteeritud)
  • S3.2buildPlatformNdaPdf deterministlik A4 (pdf-lib, WinAnsi-puhastaja, identiteediga, sha256 Web Crypto kaudu)
  • S3.3 — Dokobit Universal Signing klient (dokobit.ts) koos stub-režiimiga, kui DOKOBIT_API_KEY puudub
  • S3.4POST /api/me/platform-nda/{start,complete} (R2 üleslaadimine, KV sessioon, auditrida, vanema viida)
  • S3.5engagementProgress.ts computeNext 8-juhuline olekumasina draiver
  • S3.6NdaSignView Capacitor.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_threads skeem saab engagement_id (loogiline FK) + 'engagement' liigi diskriminaatori; migratsioon 0020_elite_next_avengers.sql
  • Idempotentne lõime loomine engagementProgress.advanceOnPlatformNdaSigned-is — esimene kord, kui engagement jõuab pending_engagement_contracts-i (mõlemad kahepoolsed NDA-d allkirjastatud)
  • Mobiilne vestluspind — ChatThreadsView (rolli-põhiselt redigeeritud loend) + ChatThreadView (Ionic mullid, küsimine, optimistlik koostaja); NdaSignView lisab „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/chat indeks + /admin/chat/[id] transkript, väravatud requireAdmin-iga (globaalse-skoobiga user_role_assignments rida → admin slug); 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.ts juba pakub ios{code,name,url} blokki
  • Võtmehoidla varundus eemal arvutistapps/mobile/android/skillhub-release.keystore + keystore.properties 1Password / krüpteeritud USB-le (mõlemad gitignored; kaotus = võimaluse kaotus sama applicationId-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, 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).
  • R14.2referral_payouts pearaamat 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äisarv amount_minor sendid, currency ISO-4217, ainult auditeeritav.
  • R14.3GET /api/me/referrals (aktiivne kood + eluaegsed statistikad + omistamiste ajalugu, kus PII on redigeeritud ainult ajatemplitele + olekumärkidele, mitte kunagi nimedele/e-postidele) ja POST /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=CODE käivitus-URL-ist localStorage-isse ja kordavad POST /api/me/referrals/attribute kutset igal /api/me vä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 (createReferralPayoutForConfirmedHours abistaja koos computePayoutAmountMinor-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.vue Web 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) ja attribution_burst (≥ 4 omistamist mistahes 24 h liikuvas aknas). requireAdmin valvur taaskasutatud Faasist 12.
  • R14.8 — i18n EN + ET tarnitud; 18 uut vitest juhtumit apps/web/tests/referrals.test.ts-s (generateCode pikkus / tähestik / mitte-mitmemõttelised märgid / eristatavus, computeAttributionExpiry 90-päevane aken + monotoonsus, isAttributionActiveAt poolavatud 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.") renderdatud ReferralsView-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/share pluginale (varasem navigator.share oli Androidi WebView-s defineerimata ja kukkus vaikselt läbi clipboard-only-le, mistõttu „Jaga" tundus katki). Jagamise URL viidi üle aadressile https://skillhub.ee/join?ref=CODE. Uus avalik Nitro marsruut apps/web/server/api/referrals/resolve.get.ts tagastab { valid, referrerName, windowDays, bonusPerHourMinor, bonusCurrency } — suunaja nimi redigeeritud uue puhta abi-funktsiooniga formatReferrerHandle kujule „Tiit T." (peegeldab chatThread.counterpartyHandle redigeerimist), nii et leht ütleb „Tiit T. kutsus sind SkillHubi" ilma perekonnanime lekitamata. 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. 8 uut vitest juhtumit kinnitavad nime-redigeerimise maatriksi (regression: täisperenimi ei lekita kunagi).
  • R14.11 — universaalsed sügav-lingid (v1.0.19). AndroidManifest.xml lisab autoVerify="true" intent-filtri aadressile https://skillhub.ee/join; 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). 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.

29.3 Kinnitatud invariantid

Need reeglid on viidatud §9-le, §15.2-le, §31-le (EN-versioonis) — kordame siin, et nad ei triiviks:

  1. Töötajad ei näe kunagi kliendi arvelduse hinda, tööandja palgakulu ega platvormi marginaali.
  2. Kliendid ei näe kunagi töötaja brutotunni- ega platvormi marginaali.
  3. 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.
  4. Kogu finantsmatemaatika kasutab täisarvulisi minoorseid ühikuid (sente) — mitte kunagi ujukomaarve.
  5. SkillHub OÜ (Devskills OÜ, reg 17171697) on juriidiline tööandja (EoR); toote „tööandja" string viitab kliendile / üürivale ettevõttele.
  6. 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