Cristian Bazatin
Download CV Scarica il CV

Full-stack · Security · AI — Agno, TicinoFull-stack · Sicurezza · AI — Agno, Ticino

Cristian Bazatin builds secure web apps. Cristian Bazatin crea web app sicure.

Three years building online shops, booking systems and internal tools with Svelte, React, Node.js and PostgreSQL. A Master's in Cyber Security and Machine Learning, so security and AI are part of how I build, not add‑ons. Based in Agno, Ticino, and open to developer roles in Ticino, across Switzerland or remote.

Tre anni di sviluppo di negozi online, sistemi di prenotazione e strumenti interni con Svelte, React, Node.js e PostgreSQL. Un Master in Cyber Security e Machine Learning: sicurezza e AI fanno parte del modo in cui costruisco, non sono un'aggiunta. Vivo ad Agno, in Ticino, e cerco un ruolo da sviluppatore in Ticino, in Svizzera o da remoto.

drag to rotate · scroll to exploretrascina per ruotare · scorri per esplorare

Selected workProgetti selezionati

Each row opens into a short case: the problem, what I built, the stack and the result. The three marked in progress are what I am building now, with AI tooling, to solve problems I keep seeing in small Swiss companies.

Ogni riga si apre in un breve caso: il problema, cosa ho costruito, lo stack e il risultato. I tre segnati in corso sono quelli che sto costruendo adesso, con strumenti AI, per problemi che vedo spesso nelle piccole aziende svizzere.

DRTRUCK Password & Media VaultArchivio password e media Internal web app for a transport companyWeb app interna per un'azienda di trasporti 2026

The problem

DRTRUCK kept company passwords, vehicle documents, photos and videos spread across phones, email threads and a shared spreadsheet. Nobody knew who had access to what, and leaving staff kept their copies.

What I built

A single vault with one login per employee, roles that decide who sees which records, and support for any record type: credentials, documents, photos, videos. Secrets are encrypted at rest, every view and change is written to an activity log, and files are served through signed, expiring links instead of public URLs.

Result

One place for everything, access removed in one click when someone leaves, and a history of who opened what. Delivered and in daily use.

SvelteKitTypeScriptNode.jsPostgreSQLPrismaJWT + rolesDocker

Il problema

DRTRUCK teneva password aziendali, documenti dei veicoli, foto e video sparsi tra telefoni, email e un foglio condiviso. Nessuno sapeva chi avesse accesso a cosa, e chi lasciava l'azienda conservava le proprie copie.

Cosa ho costruito

Un unico archivio con un login per dipendente, ruoli che decidono chi vede quali record, e supporto per qualsiasi tipo di contenuto: credenziali, documenti, foto, video. I dati sensibili sono cifrati a riposo, ogni visualizzazione e modifica finisce in un registro attività e i file sono serviti tramite link firmati a scadenza, non URL pubblici.

Risultato

Un solo posto per tutto, accesso revocato con un clic quando qualcuno se ne va, e uno storico di chi ha aperto cosa. Consegnato e in uso quotidiano.

SvelteKitTypeScriptNode.jsPostgreSQLPrismaJWT + ruoliDocker

Phishing Triage AssistantAssistente per l'analisi del phishing Security tool with AI explanations · in progressStrumento di sicurezza con spiegazioni AI · in corso 2026

The problem

Staff in small companies get suspicious emails and have nobody to ask. They either click or forward it to the one person who knows computers.

What I am building

Paste or forward an email. The tool checks the headers (SPF, DKIM, DMARC, reply‑to mismatch), unwraps every link, compares domains against look‑alike patterns and known lists, and then a language model writes a plain‑language verdict: what is suspicious, why, and what to do. Rule results are shown as evidence so the AI explanation can be checked rather than trusted.

Why it matters

It puts my security Master's to practical use and shows the pattern I believe in: deterministic checks first, the model for explanation, a human for the decision.

Next.jsTypeScriptPython / FastAPIEmail headers, DNS

Il problema

Chi lavora in una piccola azienda riceve email sospette e non ha nessuno a cui chiedere. O clicca, o le inoltra all'unica persona che "sa di computer".

Cosa sto costruendo

Si incolla o si inoltra un'email. Lo strumento controlla le intestazioni (SPF, DKIM, DMARC, reply‑to incoerente), espande ogni link, confronta i domini con pattern simili e liste note, e poi un modello linguistico scrive un verdetto in linguaggio semplice: cosa è sospetto, perché, cosa fare. I risultati delle regole sono mostrati come prove, così la spiegazione AI si verifica invece di fidarsi.

Perché conta

Mette in pratica il mio Master in sicurezza e mostra il pattern in cui credo: prima i controlli deterministici, il modello per spiegare, una persona per decidere.

Next.jsTypeScriptPython / FastAPIIntestazioni email, DNS

Prenota, booking for small studiosPrenota, prenotazioni per piccoli studi Multi‑tenant SaaS · in progressSaaS multi‑tenant · in corso 2026

The problem

The booking site I built for a beauty salon in 2024 worked so well that other small businesses asked for the same thing. Each one would have meant a new codebase.

What I am building

One booking engine many businesses can share: each gets its own page, services, staff calendars, opening hours and holidays. Clients book without an account, get an email confirmation and a reminder, and can cancel from a link. The owner sees the week at a glance and can block time from their phone. Payments and deposits through Stripe, with Twint planned.

Why it matters

It shows I can turn one client project into a product: tenant isolation in the database, time zones and daylight saving handled properly, and a UI a salon owner uses without training.

SvelteKitTypeScriptPostgreSQLPrismaStripeResend

Il problema

Il sito di prenotazioni che ho fatto per un salone di bellezza nel 2024 ha funzionato così bene che altre piccole attività hanno chiesto la stessa cosa. Ognuna avrebbe significato un nuovo codice da zero.

Cosa sto costruendo

Un unico motore di prenotazione condiviso da più attività: ognuna ha la propria pagina, i servizi, i calendari dello staff, gli orari e le ferie. I clienti prenotano senza account, ricevono conferma e promemoria via email e possono annullare da un link. Il titolare vede la settimana a colpo d'occhio e blocca gli orari dal telefono. Pagamenti e caparre con Stripe, Twint in programma.

Perché conta

Dimostra che so trasformare un progetto per un cliente in un prodotto: isolamento dei dati per ogni attività, fusi orari e ora legale gestiti bene, e un'interfaccia che una titolare usa senza formazione.

SvelteKitTypeScriptPostgreSQLPrismaStripeResend

Allpart online shopNegozio online Allpart E‑commerce, two years as the full‑stack developerE‑commerce, due anni come sviluppatore full‑stack 2023–25

The problem

Allpart needed a fast online shop connected to existing product, order and payment services, with different access for customers, staff and administrators.

What I built

The whole storefront in SvelteKit and TypeScript: catalogue, search with filters, cart and checkout, talking to the back‑office services through REST APIs. Login with JWT and sessions, role‑based access for the admin area, input validation on every form. Code splitting and lazy loading brought the heavy pages down to a fast first load on mobile.

Result

Two years in production, from first release to steady feature work, as the developer responsible for the front end and its integration layer.

SvelteKitTypeScriptREST APIsJWTTailwind CSSVite

Il problema

Allpart aveva bisogno di un negozio online veloce, collegato ai servizi esistenti di prodotti, ordini e pagamenti, con accessi diversi per clienti, personale e amministratori.

Cosa ho costruito

Tutto il front end in SvelteKit e TypeScript: catalogo, ricerca con filtri, carrello e checkout, in dialogo con i servizi di back office tramite REST API. Login con JWT e sessioni, controllo degli accessi per l'area admin, validazione degli input su ogni form. Code splitting e lazy loading hanno reso veloce il primo caricamento anche da mobile.

Risultato

Due anni in produzione, dal primo rilascio al lavoro continuo sulle funzionalità, come sviluppatore responsabile del front end e del suo livello di integrazione.

SvelteKitTypeScriptREST APIJWTTailwind CSSVite

Clearance‑based secure web appWeb app sicura a livelli di autorizzazione Master's project in web application securityProgetto di Master in sicurezza delle applicazioni web 2025

The problem

Show, end to end, how an application enforces that each user sees only the data their clearance level allows, and that every access can be audited afterwards.

What I built

A React front end over a Node and Express API. Clearance levels and roles are enforced in the API and in the database queries, never only in the interface. Short‑lived JWTs with refresh, rate limiting on login, strict input validation, and an admin panel with a tamper‑evident activity log. Tested against the OWASP Top 10, with the findings documented in the thesis.

Result

Graduated with the Master's in Cyber Security and Machine Learning. The same patterns went straight into the DRTRUCK vault a year later.

ReactNode.jsExpressJWTOWASP

Il problema

Mostrare, da cima a fondo, come un'applicazione garantisce che ogni utente veda solo i dati permessi dal proprio livello di autorizzazione, e che ogni accesso sia verificabile a posteriori.

Cosa ho costruito

Un front end React su un'API Node ed Express. Livelli e ruoli sono applicati nell'API e nelle query al database, mai solo nell'interfaccia. JWT a breve durata con refresh, limitazione dei tentativi di login, validazione rigorosa degli input, e un pannello admin con un registro attività a prova di manomissione. Testata contro la OWASP Top 10, con i risultati documentati nella tesi.

Risultato

Master in Cyber Security e Machine Learning conseguito. Gli stessi pattern sono finiti un anno dopo nell'archivio DRTRUCK.

ReactNode.jsExpressJWTOWASP

Car specification translatorTraduttore di specifiche auto LLM pipeline, Polish to EnglishPipeline LLM, dal polacco all'inglese 2025

The problem

Thousands of car listings arrived with specifications in Polish, in inconsistent units and vocabulary. Translating them by hand was a full‑time job.

What I built

A Python pipeline that sends each specification to a language model with a fixed glossary and a strict output schema, then validates the result: units converted and checked against ranges, terms mapped to one controlled list, anything that fails sent to a review queue instead of silently accepted.

Result

Consistent English specifications at a fraction of the time, with every automatic output traceable to its source line.

PythonLLM APIPydanticCSV / JSON

Il problema

Migliaia di annunci auto arrivavano con specifiche in polacco, con unità e vocabolario incoerenti. Tradurle a mano era un lavoro a tempo pieno.

Cosa ho costruito

Una pipeline Python che invia ogni specifica a un modello linguistico con un glossario fisso e uno schema di output rigoroso, poi valida il risultato: unità convertite e controllate nei range, termini mappati su una lista controllata, e tutto ciò che fallisce finisce in una coda di revisione invece di essere accettato in silenzio.

Risultato

Specifiche in inglese coerenti in una frazione del tempo, con ogni output automatico riconducibile alla riga di origine.

PythonAPI LLMPydanticCSV / JSON

AdrianaBrows Beauty salon site with online bookingSito per salone di bellezza con prenotazioni online 2024

The problem

A salon owner was losing evenings answering booking messages and still getting no‑shows.

What I built

A responsive site with a booking flow: pick a service, see real free slots, book in under a minute. Automatic confirmation and reminder emails through Mailjet, a small Rust backend with SQL for the calendar, and a page the owner can manage without me.

Result

Bookings moved online, fewer no‑shows, and the request that became the Prenota product above.

SvelteRustSQLMailjet

Il problema

Una titolare di salone perdeva le serate a rispondere ai messaggi di prenotazione e continuava ad avere clienti che non si presentavano.

Cosa ho costruito

Un sito responsive con un flusso di prenotazione: scegli il servizio, vedi gli orari davvero liberi, prenoti in meno di un minuto. Email automatiche di conferma e promemoria con Mailjet, un piccolo backend Rust con SQL per il calendario, e una pagina che la titolare gestisce senza di me.

Risultato

Prenotazioni online, meno assenze, e la richiesta da cui è nato il prodotto Prenota qui sopra.

SvelteRustSQLMailjet

Shared wishlist platformPiattaforma di wishlist condivise Internship project at SoftbinatorProgetto di stage presso Softbinator 2022

What I built

User accounts, groups, invitations by link and notifications when someone reserves a gift, so nobody buys the same thing twice. REST APIs with login and permission rules, built in a small team on a sprint rhythm.

JavaScriptNode.jsREST APIsMongoDB

Cosa ho costruito

Account utente, gruppi, inviti tramite link e notifiche quando qualcuno prenota un regalo, così nessuno compra la stessa cosa due volte. REST API con login e regole di autorizzazione, in un piccolo team con ritmo a sprint.

JavaScriptNode.jsREST APIMongoDB

Melilux Furniture online shopNegozio online di arredamento 2022

What I built

A responsive furniture e‑commerce site built as a React app, with custom layouts, product galleries and an admin area where the client manages the catalogue. My first paid project, and the one that taught me how much of web work is listening.

ReactJavaScriptCSS

Cosa ho costruito

Un sito e‑commerce di arredamento responsive costruito come app React, con layout personalizzati, gallerie prodotto e un’area admin da cui il cliente gestisce il catalogo. Il mio primo progetto pagato, quello che mi ha insegnato quanto del lavoro web sia ascoltare.

ReactJavaScriptCSS

Security labLaboratorio di sicurezza

A small live tool from the DRTRUCK vault work. Type any password and see how long it would survive. It runs entirely in your browser; nothing is sent anywhere.

Un piccolo strumento dal lavoro sul vault DRTRUCK. Scrivi una password qualsiasi e guarda quanto resisterebbe. Gira tutto nel tuo browser; nulla viene inviato.

EntropyEntropia
0 bits
Online attack · 100 guesses/sAttacco online · 100 tentativi/s
—
Offline attack · 10 billion/sAttacco offline · 10 miliardi/s
—
  • 12 characters or moreAlmeno 12 caratteri
  • Upper and lower caseMaiuscole e minuscole
  • A numberUn numero
  • A symbolUn simbolo
  • Not in the common-password listNon nella lista delle password comuni
  • No keyboard runs, repeats or yearsNiente sequenze di tastiera, ripetizioni o anni

Estimates follow the usual entropy model with penalties for predictable patterns. The vault itself hashes passwords with Argon2id and never stores them in clear.Le stime seguono il consueto modello di entropia con penalità per gli schemi prevedibili. Il vault stesso usa Argon2id e non salva mai le password in chiaro.

How I workCome lavoro

Security is a default, not a feature.

Every project gets proper authentication, roles enforced on the server, validated input and an audit trail. It costs little on day one and saves the client from the expensive day later.

La sicurezza è un'impostazione di base, non una funzionalità.

Ogni progetto ha autenticazione seria, ruoli applicati sul server, input validati e un registro delle attività. Costa poco il primo giorno e risparmia al cliente il giorno costoso dopo.

AI makes me faster, validation keeps it honest.

I use language models daily, for code and inside products. Where a model's output matters, it is checked by rules, shown next to its source and reviewed by a person. That is how the translation tool and the invoice reader are built.

L'AI mi rende più veloce, la validazione la tiene onesta.

Uso modelli linguistici ogni giorno, per il codice e dentro i prodotti. Dove l'output di un modello conta, viene controllato da regole, mostrato accanto alla fonte e rivisto da una persona. Così sono costruiti il traduttore e il lettore di fatture.

Ship small, finish properly.

A first version the client can use within weeks, then steady improvements. Fast pages, accessible layouts, and a handover the next developer will thank me for.

Rilasci piccoli, finiti bene.

Una prima versione che il cliente usa entro poche settimane, poi miglioramenti costanti. Pagine veloci, layout accessibili e una consegna per cui il prossimo sviluppatore mi ringrazierà.

ExperienceEsperienza

AboutChi sono

I grew up in Moldova, studied computer science in Constanța, Romania, and moved to Ticino, where I live in Agno with a Swiss L permit. I started building websites for local businesses while still at university, and I have not stopped since.

What I enjoy is the whole arc of a project: understanding what a salon owner or a transport company actually needs, designing an interface they can use without a manual, and building the server side so that it stays correct and secure when nobody is watching.

The Master's in cyber security changed how I write every line. I assume the input is hostile, the user is in a hurry and the client will grow, and I build for all three.

I speak Romanian and Russian natively, work in English every day, and my Italian is improving quickly in Ticino. I would rather join a team where I can learn from people better than me than be the only developer in the room.

Cristian Bazatin

Full‑stack web developer, Agno, Ticino

Sono cresciuto in Moldova, ho studiato informatica a Constanța, in Romania, e mi sono trasferito in Ticino, dove vivo ad Agno con permesso L. Ho iniziato a costruire siti per attività locali quando ero ancora all'università, e da allora non ho più smesso.

Quello che mi piace è l'intero arco di un progetto: capire di cosa ha davvero bisogno una titolare di salone o un'azienda di trasporti, disegnare un'interfaccia che usano senza manuale, e costruire la parte server in modo che resti corretta e sicura quando nessuno guarda.

Il Master in cyber security ha cambiato il modo in cui scrivo ogni riga. Do per scontato che l'input sia ostile, che l'utente abbia fretta e che il cliente crescerà, e costruisco per tutti e tre.

Parlo rumeno e russo a livello madrelingua, lavoro in inglese ogni giorno e il mio italiano migliora in fretta in Ticino. Preferisco entrare in un team dove posso imparare da persone più brave di me piuttosto che essere l'unico sviluppatore nella stanza.

Cristian Bazatin

Sviluppatore web full‑stack, Agno, Ticino

Front endFront end

  • JavaScript, TypeScript, HTML, CSS
  • Svelte / SvelteKit, React, Next.js
  • Tailwind CSS, Vite

Back end and dataBack end e dati

  • Node.js, Express, Python (FastAPI), C#
  • PostgreSQL, MongoDB, SQL, Prisma
  • REST APIs, Docker, CI/CD, Git

Security and AISicurezza e AI

  • JWT and session auth, roles and permissions, input validation, OWASP Top 10Autenticazione JWT e sessioni, ruoli e permessi, validazione input, OWASP Top 10
  • LLM APIs in products with schema validation, AI‑assisted development, ML fundamentalsAPI LLM nei prodotti con validazione a schema, sviluppo assistito da AI, basi di ML

LanguagesLingue

  • Romanian nativeRumeno madrelingua
  • Russian C2Russo C2
  • English C1Inglese C1
  • Italian A2, listening B1Italiano A2, ascolto B1

For recruitersPer i recruiter

The facts you need before the first call, in one place.

I dati che ti servono prima della prima chiamata, in un unico posto.

RoleRuolo
Full‑stack or front‑end web developerSviluppatore web full‑stack o front‑end
LocationSede
Agno, Ticino · on‑site, hybrid or remote in SwitzerlandAgno, Ticino · in sede, ibrido o da remoto in Svizzera
Work permitPermesso
Moldovan citizen, also Romanian (EU) · Swiss L permitCittadino moldavo, anche rumeno (UE) · permesso L svizzero
AvailabilityDisponibilità
Available now, short noticeDisponibile subito, breve preavviso
ExperienceEsperienza
3+ years · SvelteKit, React, Node.js, PostgreSQL3+ anni · SvelteKit, React, Node.js, PostgreSQL
EducationFormazione
MSc Cyber Security & Machine Learning · BSc Computer ScienceMaster in Cyber Security e Machine Learning · Laurea in Informatica
LanguagesLingue
English C1 · Italian A2, improving · Romanian native · Russian C2Inglese C1 · Italiano A2, in miglioramento · Rumeno madrelingua · Russo C2
Driving licencePatente
Category BCategoria B

ContactContatti

A developer who ships, takes security seriously and already lives in Ticino. Let's talk.

Uno sviluppatore che consegna, prende sul serio la sicurezza e vive già in Ticino. Parliamone.

Agno, Ticino, Switzerland · Swiss L permit · available for on‑site, hybrid or remote roles · I reply within a day. Agno, Ticino, Svizzera · Permesso L · disponibile per ruoli in sede, ibridi o da remoto · rispondo entro un giorno.