FableVita
FableVita — DI fitneso treneris su lygomis, užduotimis ir nuo sukčiavimo apsaugota apdovanojimų ekonomika.
Dev-storyIššūkis
FableVita — vienas produktas per daug paviršių (web, trenerio įrankiai, iOS, Android, Apple Watch ir dešimtys dėvimų įrenginių), ir jis apdovanoja realią veiklą, o tai kviečia sukčiauti, jei ekonomika naivi.
Ką darėme
Pagrindinė realaus laiko platforma (mūsų webedge-db backendas) maitina DI trenerį, trenerių prekyvietę ir geimifikacijos sluoksnį — lygiai, serijos, užduotys, sezoninės lygos su pakilimu/kritimu, komandų iššūkiai ir trofėjų spinta — ant apdovanojimų ekonomikos: nuo tiekėjo nepriklausantis išdavimas (nuolaida/kreditas/rėmėjas), idempotentiniai mokėjimai su grąžinimu append-only audito žurnale, deterministiniai įtartinos veiklos signalai ir moderatorių tikrinimas, kad botai ir segmentų apgavikai neišsemtų apdovanojimų.
Rezultatas
Kiekvienas paviršius dirba su tais pačiais atleto duomenimis — nuo vienos treniruotės iki lygų sezono — o apdovanojimų pusė lieka audituojama ir sunkiai apgaunama.
Dev-story straipsnis
Kaip buvo kuriamas projektas: FableVita
FableVita yra vienas produktas per daug paviršių — web, trenerio įrankiai, iOS, Android, Apple Watch ir dešimtys dėvimų įrenginių — ir jis daro tai, ko dauguma fitneso programų nedaro: moka tikrus apdovanojimus už tikrą veiklą. Vos programa apdovanoja elgesį, žmonės bando ją apgauti, tad įdomiausia inžinerija yra ne treneris, o ekonomika, kuri turi atlaikyti atakas.
Skyriai
05
Moduliai
05
Stackas
Vue 3 + webedge-db
Kodėl projektas atsirado
FableVita — vienas produktas per daug paviršių (web, trenerio įrankiai, iOS, Android, Apple Watch ir dešimtys dėvimų įrenginių), ir jis apdovanoja realią veiklą, o tai kviečia sukčiauti, jei ekonomika naivi.
FableVita yra vienas produktas per daug paviršių — web, trenerio įrankiai, iOS, Android, Apple Watch ir dešimtys dėvimų įrenginių — ir jis daro tai, ko dauguma fitneso programų nedaro: moka tikrus apdovanojimus už tikrą veiklą. Vos programa apdovanoja elgesį, žmonės bando ją apgauti, tad įdomiausia inžinerija yra ne treneris, o ekonomika, kuri turi atlaikyti atakas.
Ką sukūrėme
Pagrindinė realaus laiko platforma (mūsų webedge-db backendas) maitina DI trenerį, trenerių prekyvietę ir geimifikacijos sluoksnį — lygiai, serijos, užduotys, sezoninės lygos su pakilimu/kritimu, komandų iššūkiai ir trofėjų spinta — ant apdovanojimų ekonomikos: nuo tiekėjo nepriklausantis išdavimas (nuolaida/kreditas/rėmėjas), idempotentiniai mokėjimai su grąžinimu append-only audito žurnale, deterministiniai įtartinos veiklos signalai ir moderatorių tikrinimas, kad botai ir segmentų apgavikai neišsemtų apdovanojimų.
Ant pagrindinio realaus laiko backendo FableVita prideda DI trenerį, trenerių prekyvietę ir geimifikaciją — lygiai, serijos, užduotys, sezoninės lygos su pakilimu ir kritimu, komandų iššūkiai ir trofėjų spinta — o po visu tuo apdovanojimų ekonomiką: nuo tiekėjo nepriklausantis išdavimas (nuolaida, kreditas ar rėmėjas), idempotentiniai mokėjimai su grąžinimu append-only audito žurnale ir sukčiavimo sluoksnis, sprendžiantis, kuri veikla realiai skaičiuojama.
Pagrindiniai moduliai ir vartotojo kelias
Apdovanojimų išdavimas nepriklauso nuo tiekėjo ir yra idempotentinis: viena sąsaja išduoda nuolaidą, kreditą ar rėmėjo apdovanojimą, būsenų mašina tvarko vietinį ir rankinį išdavimą, o grąžinimai pridedami į audito žurnalą, ne keičiant istoriją.
Anti-frodas deterministinis, ne nuojauta: centralizuoti įtartinos veiklos signalai (neįmanomi greičiai, segmentų, užduočių ir lygų anomalijos) maitina moderatorių eilę, kuri niekada automatiškai neblokuoja — žmogus patvirtina, o kiekviena veikla turi kilmės etiketę, kodėl skaičiuota ar ne.
Lygos vykdo tikrą sezoną: reitingai materializuojami su stabiliomis rango ir lygiųjų taisyklėmis, sezono uždarymas idempotentinis (galima saugiai perpaleisti) ir viename žingsnyje tvarko apdovanojimus, pakilimą ir kritimą.
Iššūkiai apsaugoti net nuo paties modelio: personalizuoti iššūkių juodraščiai turi deterministines ribas ir preview-validate-confirm srautą, tad modelio tekstas niekada neperrašo skaičiavimo variklių.
Importai saugūs iš prigimties: dalinio commit saugus kelias reiškia, kad sesijos įrašas niekada pusiaukelėje netampa failed, o klaidų injekcijos testai įrodo, kad šalutiniai efektai niekada nesugadina pagrindinių įrašų.
Architektūra ir technologiniai sprendimai
Sukurta su Vue 3, webedge-db, Swift, Kotlin, Wearables.
Pagrindinis realaus laiko backendas maitina atskiras trenerio programas, mobiliuosius klientus ir dėvimų įrenginių adapterius (Apple Watch, Garmin, Polar, Whoop, Oura, Fitbit, Withings, Coros ir kt.); Wave-1 sustiprinimas uždarė root-autorizacijos spragas ir padarė paslaptis produkcijai griežtas; net Cloudflare Pages 25MB riba privertė atsisakyti įrenginyje veikiančio mitybos modelio — tikras apribojimas, sutvarkytas sąžiningai.
Rezultatas ir pamokos
Kiekvienas paviršius dirba su tais pačiais atleto duomenimis — nuo vienos treniruotės iki lygų sezono — o apdovanojimų pusė lieka audituojama ir sunkiai apgaunama.
Fitneso super-appas, kur apdovanojimų pusė audituojama ir sunkiai apgaunama: vienas atleto duomenų modelis nuo vienos treniruotės iki viso lygų sezono, su ekonomika, kuri daro prielaidą, kad bus atakuojama, ir pastatyta atlaikyti.
Susiję straipsniai
Toliau skaityti
Susijusios projektų istorijos
Šie projektai turi artimų technologinių arba produkto sprendimų, todėl padeda matyti, kaip tas pats principas veikia kitame kontekste.
Dev-storyCMS
Dinaminis CMS ant webedge-db — turinio tipai, medija, rolės ir vieša skaitymo API, maitinanti mūsų svetaines ir straipsnius.
Dev-storyKalendoriaus rezervacijų platforma
Rezervacijos ant Vue 3 — laisvi laikai, užsakymai, laiškai ir Meet vaizdo nuorodos.
Dev-storyePokalbis bendruomenės forumas
Viešas ePokalbis bendruomenės forumas ant webedge-db.
Turite panašią idėją?
Aptarti projektą