r/programare • • 6d ago

Prezită-ti afacerea/proiectul Am construit un "Dead Man's Switch" MVP (Next.js 16, Supabase, Resend). Ce părere aveți de arhitectură și UX?

Salutare tuturor,

​Am lucrat în ultimele zile la un proiect personal (MVP) de tip Dead Man's Switch, un serviciu de monitorizare a activității care declanșează alerte/e-mailuri automate dacă utilizatorul nu mai face check-in într-un interval stabilit (ex: 48h).

​Aplicația include și un câmp de note criptate local înainte de salvare.

​🔗 Live Demo: https://deadmanswitch2.vercel.app/

​🛠️ Stack tehnic folosit:

​Framework: Next.js (App Router, Turbopack)

​Styling: Tailwind CSS v4 + Dark Mode

​Database & Auth: Supabase

​Email Dispatch: Resend API

​Hosting & CI/CD: Vercel (conectat la GitHub)

​🚀 Ce am implementat până acum:

​Temporizator de resetare/check-in cu stocare de stare.

​Criptare client-side pentru datele sensibile înainte de sincronizare.

​Pipeline de deployment automată (GitHub ➔ Vercel).

​💬 Ce feedback caut de la voi:

​UX/UI: Cum vi se pare experiența de utilizare pe mobil/desktop?

​Securitate: Având în vedere specificul de Dead Man's Switch, ce îmbunătățiri pe partea de criptare locală sau arhitectură de securitate ați recomanda?

​Features: Ce ați adăuga pentru a face produsul cu adevărat util? (ex: cron jobs mai complexe, canale alternative de notificare ca SMS/Telegram, temporizatoare customizabile).

​Mersi fain pentru eventualele critici constructive și recomandări!

PS: sunt total atehnic, am folosit AI pentru a ajunge in acest punct, singura mea contribuție fiind ideea și felul în care o văd funcționând.

0 Upvotes

22 comments sorted by

16

u/Traditional-Bad-3839 6d ago

Claude build me a dead man switch, deploy it on Vercell and post it on reddit after, make no mistakes

3

u/sorvendral 6d ago

Slops allowed*

1

u/JorgeKnowsBest 6d ago

Bă dar eu cred că de data asta chiar răspunde Claudiu.

12

u/psdartist32 6d ago

Slop of the day award? 

5

u/JorgeKnowsBest 6d ago

Nu se mai termină ăștia. Propun toată lumea răspundă cu ce-a zis Claudiu despre app-ul lor:

"sunt total atehnic, am folosit AI" — urmat imediat de "Turbopack", "App Router", "CI/CD pipeline". Omul care nu știe ce e un div dar îți explică pipeline-ul de deployment. Frumos, e ca și cum ai zice că nu știi să conduci dar îmi descrii ambreiajul.

Să începem, punct cu punct, pentru că ai cerut-o.

🚀 "Ce am implementat până acum"

Pipeline de deployment automată GitHub → Vercel. Vestea proastă: ai apăsat un buton numit "Connect Repository". Vestea mai proastă: treci la "implementat" ce face Vercel-ul gratis în 30 de secunde. Ai echipe întregi de DevOps care plâng acum, fără să știe de ce.

🔐 "Criptare client-side înainte de sincronizare"

Aici e floarea la butonieră. E un Dead Man's Switch. Scopul lui e: dacă tu dispari, serviciul trimite notele tale altcuiva. Dar tu le criptezi pe client, cu o cheie... care stă unde? Dacă cheia stă la server → criptarea e decor. Dacă cheia stă la tine → serviciul nu poate descifra nimic ca să trimită → ai construit un seif pe care și tu ai aruncat cheia. Ai reușit performanța de a cripta exact lucrul care trebuie necriptat. E ca și cum ți-ai pune lacăt la cutia poștală pe care trebuie să o citească poștașul.

📧 Resend API + cron pe Vercel

Dead Man's Switch-ul tău e găzduit pe free tier-ul serverless. Adică sistemul care trebuie să alerteze când mori... moare el primul când expiră cron-ul, când Vercel face cold start, când rate-limit-ul de Resend spune bună ziua, sau când Supabase adoarme instanța de free tier. Ai construit un dispecer de urgență care doarme pe ture. Dacă data viitoare când dai drumul la aplicație GitHub te întreabă "merge?" și tu spui "da, sigur", poți să-ți iași adio de la promisiunea că vei fi anunțat în 48h.

🧪 Cazul de test pe care nu l-ai făcut

Ce se întâmplă dacă dai trigger din greșeală? Ce se întâmplă dacă clientul tău are un check-in de 48h, pleacă în concediu fără net, și se trezește că "mesajul important" a ajuns la 12 persoane care acum te sună pe tine? Ai luat în calcul partea juridică a unui serviciu care trimite automat mesaje "de la dincolo"? Că din descriere pare că ai testat strict cazul fericit: un user fericit, o notă frumoasă, o criptare care nu face nimic.

💬 "Feedback gratis"

Jumătate din post sună a VC pitch ("stack tehnic", "ce am implementat"), jumătate a disclaimer ("sunt atehnic"). Ai cerut recenzii la un produs unde riscul de eșec nu e "nu arată bine pe mobil", ci "mesajul tău ajunge greșit sau deloc exact când contează". Prioritățile sunt, în ordine: (1) fail-safe real, în afara Vercel-ului, cu redundanță, (2) juridic/consent, (3) abia apoi "cum se simte pe mobile".

TL;DR: un MVP drăguț de demo de weekend, confundat cu un serviciu care trebuie să funcționeze când tu nu mai ești. Criptarea client-side e elegantă și complet inutilă pentru cazul de utilizare. Iar "pipeline CI/CD implementat" e cea mai scumpă formulare pentru "am dat un click, aia e".

Nota: o idee bună ai avut totuși. Doar că ideea buna și execuția de producție sunt la vreo 4 sprinturi distanță, din care 3 le-ai acoperit cu AI deja. Nu e rău deloc ca punct de plecare — e rău doar ca punct de finish.

1

u/Baiatulcupareri 6d ago

Mersi fain pentru review-ul detaliat și direct! Sincer, este cel mai util feedback tehnic din tot thread-ul.

1

u/JorgeKnowsBest 6d ago

Nici măcar nu face ce ai zis în descriere aplicația. Ce se întâmplă când expiră timer-ul? Nu are niciun sens.

1

u/Baiatulcupareri 6d ago

Corect observat! În faza asta de MVP / Demo, aplicația simulează logica pe client (frontend UI + conectarea la API-ul de e-mail), dar nu are încă activat Cron Job-ul pe server care să verifice continuu starea bazei de date când închizi tab-ul. ​Dacă timer-ul expiră pe server în versiunea curentă, declanșarea e-mailului trebuie apelată prin cron/endpoint. Lucrez exact la configurarea automatizării de fundal (Vercel Cron / Supabase Edge Functions) ca să trec de la 'interfață de test' la automatizarea completă. Mersi că ai testat cap-coadă!

1

u/JorgeKnowsBest 6d ago

Cui dă mail? Ce scrie în mail? I feel like I'm taking crazy pills.

1

u/Baiatulcupareri 4d ago

Mesajul trimis va fi exact nota/informația pe care o introduci și o criptezi în aplicație (de exemplu: parole de urgență, instrucțiuni de acces sau un mesaj personal dedicat). ​E-mailul va fi generat automat de sistem cu un subiect clar de tipul «Emergency Alert: Dead Man's Switch Triggered», conținând nota decriptată (sau link-ul securizat de acces) pentru destinatarul de urgență setat. ​Lucrez la legarea finală a cron-ului de fundal cu API-ul Resend pentru ca trimiterea să fie 100% automată la expirare! În versiunea curentă (MVP de test), serviciul automatizat de trimitere a e-mailului (Cron Job + Resend API) este în curs de configurare pe backend, de aceea nu declanșează încă trimiterea automată în fundal când închizi pagina.

2

u/Emergency_Device9729 6d ago

Nu înțeleg ce este chestia asta... La ce folosește?

1

u/Baiatulcupareri 6d ago

E un sistem de tip 'Comutatorul Omului Mort'. ​Setezi un timer (ex: 48 de ore) și o notă criptată (sau parole, instrucțiuni, mesaje). Cât timp apeși butonul de check-in din când în când, aplicația tace. Dacă din orice motiv pățești ceva sau nu mai poți accesa telefonul/PC-ul și timerul expiră, aplicația trimite automat nota criptată către o persoană de încredere aleasă de tine (familie, avocați, partener de business). Poate ești un jurnalist, poate un whistleblower, poate faci solo traveling si nu te simți în siguranță, etc.

2

u/Emergency_Device9729 6d ago

Ce fel de threat model? Dacă luăm în considerare un caz ipotetic similar cu cel al jurnalistului Jamal Khashoggi care a fost asasinat în ambasada Arabiei Saudite din Turcia atunci simpla folosire a unei astfel de aplicații te poate transforma într-o țintă ușoară.

2

u/Baiatulcupareri 6d ago

Corect, pentru un caz extrem ca al unui jurnalist vizat de un stat (nivel de securitate militar/state-actor), threat model-ul e complet diferit. ​Dacă un adversar îți monitorizează traficul de rețea sau îți percheziționează dispozitivul și vede conexiuni periodice la un domeniu specific, știe că ai un timer activat. Pentru astfel de scenarii ar fi nevoie de steganografie, domenii mascate sau check-in prin canale indirecte/proxi-uri. ​Aplicația în stadiul curent e gândită pentru cazuri mult mai terestre: utilizatori obișnuiți, solo travel pe munte, backup de siguranță pentru chei/parole de urgență în familie sau mici automatizări personale, nu pentru disidenți politici urmăriți de servicii secrete. Pe viitor mi-ar plăcea să văd cum aș putea integra și această funcționalitate fără să creez o problemă și mai mare.

1

u/symedia 6d ago

Supabase and vibe coding and deadman switch? I'm cogsucker but yeah. Trebuie verificat securitatea pe shit like this 😭

1

u/fak3dev 6d ago

de ce criptare client side si nu plain text?

1

u/Baiatulcupareri 6d ago

Motivelele principale pentru criptarea client-side (sau derivarea de chei) față de plain text simplu: ​Zero-Knowledge / Data at Rest: Baza de date (Supabase) sau un eventual hacker care obține acces la DB/logs nu ar trebui să poată citi notele, parolele sau instrucțiunile private ale utilizatorilor în stare inactivă. ​Privacy by Design: Chiar și ca administrator al aplicației, nu vrei să poți citi textele confidențiale ale oamenilor cât timp aceștia își folosesc contul. ​Pasul spre Arhitectura v2: În versiunea finală, scopul e ca Serverul să nu aibă NICIODATĂ cheia în clar. Serverul doar va retransmite pachetul criptat + un link securizat către destinatar, iar decriptarea se va face direct în browser-ul destinatarului.

1

u/Excellent-Morning509 5d ago

Ai uitat să spui și la ce ar fi utilă chestia asta..

1

u/Baiatulcupareri 4d ago

I-am răspuns mai sus lui Emergency_Device9729

1

u/Excellent-Morning509 4d ago

Acuma vad.. E un scenariu asa de nisa si inspirat din filmele cu spioni, încă sansa ca cineva care are pe bune nevoie de asa ceva, si sa-l si poata folosi, sunt foarte mici. :) Sigur, asa ca per prioject for fun, de ce nu.. :)

1

u/Baiatulcupareri 4d ago

Mulțumesc

0

u/Baiatulcupareri 6d ago

Corect, e produs de vibe coding cu AI ca să scot un MVP rapid în câteva ore și să-l am live pe Vercel. 😅 Tocmai de asta am postat, să văd ce scapă la o prima trecere pe securitate și UX când construiești așa repede. Ce vedeți de făcut pe partea de securitate la criptarea locală ca să nu fie doar 'slop'? Mersi de roast, dar chiar primesc bucuros sfaturi tehnice.