Open to backend roles · on-site, hybrid, remote Belgrade —:— CET · overlaps most of Europe

Backend systems, built to stay up.

I'm Marko Keser, a backend engineer working in C#/.NET and Java. I've kept a US client's production app stable, written the math models behind online slot games, and built and deployed a restaurant system used at live events.

Experience
2y 3macross three engineering roles
Shipped solo
2 systemsboth live, both linked
Primary stack
C# · Java.NET, SQL, REST

Both links open the running app, not a screenshot.

Selected work

Two systems, both built solo — schema, API, auth, front end, deploy.

Restaurant management system

Orders, tables and billing — tracked in real time at live events.

Solo build
Used at live events
POST /api/orders 201 CREATED 142 ms
http.request142 ms
auth.claims7 ms
authorizerole=waiter3 ms
order.validate9 ms
db.transaction82 ms
INSERT orders22 ms
INSERT order_items×443 ms
COMMIT11 ms
table.bill.updatestatus=open32 ms
app database live status one order, table → shared bill · timings illustrative

An end-to-end web app for managing orders, tables and billing. I built all of it — the MySQL schema, roles and permissions, and the interface staff actually touch — then containerized it and deployed it. It's used at live events to track tables, drinks and shared bills in real time.

What's in it
  • Authentication, authorization and role separation with claims-based RBAC
  • Orders, tables and shared bills, kept up to date in real time
  • MySQL schema designed and queries tuned for daily operational use
  • Containerized with Docker and deployed to Railway
Stack
C#ASP.NET Core MVC MySQLDocker Railway
Hardest part

Staying stable during live use. Mid-event, the app is the record of every open table and shared bill, so error handling had to be as solid as the features.

Recruiter scanner

From a list of recruiters to ready-to-send messages, with a model in the loop.

Solo build
2025 · public demo
RUN batch · recruiter listings SCHEMA ✓ 4 tones · 1 profile
  1. parse listingcompany, role, location, profile
  2. score matchagainst one candidate profile
  3. draft messageemail or LinkedIn note, in a tone
  4. validate outputschema check before it reaches the UI
  5. ready to sendcopy · .txt · send from the app
current step one listing · example values

Job hunting meant writing the same message a hundred times. This reads a batch of recruiter listings, scores how well each one matches, and drafts the email or LinkedIn note — so the only manual step is deciding whether to send it.

What's in it
  • Four tones — professional, enthusiastic, exploratory, humble — from one profile
  • Batch generation across a whole list, with progress you can watch
  • Filters by match score, location and whether a LinkedIn profile exists
  • Copy, download as .txt, or send straight from the app
Stack
C#ASP.NET Core MVC LLM APIsJavaScript Razor
Hardest part

Getting reliable structured output from a model. The interesting work was in prompt design and in validating every response before it reached the UI.

Smaller experiments and one-offs live on GitHub.

Browse all repositories ↗

Durations calculate themselves from the dates, so this page never goes stale.

Where I've worked

Three engineering roles across gaming, enterprise consulting and Salesforce — then eight months in Barcelona taking my Spanish to B2.

Oct 2025 — May 2026 8 months

Spanish language course

SpeakEasy Spanish School, Barcelona self-improvement
  • Reached B2 level (CEFR)
Feb — Oct 2025 9 months

Backend / math developer

Wicked Games contract
  • Designed the math models and game rules behind online slot games — payout logic, RTP and volatility
  • Kept every model inside the legal limits regulators check for, while keeping the game good to play
  • Implemented the game logic and backend functionality in Java
Jan — Dec 2024 1 year

Backend developer

Quadro Consulting
  • Built features in Java for enterprise software and wired separate system components together
  • Moved onto a US client's production C# web app — maintaining and extending it, and resolving hard-to-reproduce production bugs
  • Worked across the whole stack when the ticket needed it: C#, Java, JavaScript, HTML
Sep 2022 — Feb 2023 6 months

Salesforce developer

Kameleon Solutions internship
  • Built components for client Salesforce orgs alongside senior developers
  • Handled both development and admin work inside the Salesforce ecosystem

Total time employed as an engineer: 2 years 3 months · recalculated on every page load

Certification Salesforce Certified Platform Developer I 2022
Course C# Advanced Course — OIT 2021
Education Gymnasium “Kosta Cukić”, Belgrade General secondary education · 2016 – 2020

No percentage bars. Those measure nothing.

What I work with

Honest tiers. The first group is what I reach for without thinking.

Daily shipped production code with these
C#.NETASP.NET Core JavaEntity Framework SQLMySQLREST APIs Git
Comfortable used on real projects
JavaScriptTypeScriptReact HTML / CSSSQL ServerPostgreSQL DockerClaims-based auth / RBAC Clean architectureRazorSalesforce / Apex
AI work integration, not model training
OpenAI APILLM API integrationPrompt design Structured output + validationRetry / fallback handling Secure API key handling
Also picked up as needed
Node.jsRedisRailwayPostman Probability modellingRegulatory compliance
Languages human ones
Serbian — nativeEnglish — C1Spanish — B2

It's a model reading my CV. Verify anything important with me.

Ask about my work

Faster than reading the whole page. It knows my roles, projects and stack.

assistant ready
ai

Ask me anything about Marko's experience, projects or stack. I'll keep it short.

Email is fastest. I reply to everything.

Got a backend problem? Let's talk.

I'm looking for backend or AI-integration work. I'm based in Belgrade and open to on-site, hybrid and remote roles. Tell me what you're building and I'll tell you straight whether I'm the right fit.