Marija
Tepic.

I study computer science and am looking to further my knowledge and skills.

Let me show you

Selected work,
projects & experiments.

00 / Custom HTTP/1.1 Web Server

This portfolio is hosted
on the server I built.

Created as an individual project at FHNW, this Python-based HTTP/1.1 server was developed through multiple iterations, with particular attention to security, resilience, and protocol correctness.

Instead of relying on a web framework, I implemented the core server behaviour myself — from parsing requests and generating responses to routing, persistent connections and secure file handling.

The server now runs on an Ubuntu VM and hosts this portfolio.

Under the hood

Protocol

HTTP/1.1 parsing
Response handling
Routing
Keep-Alive
Status codes
Static files

Security

TLS / HTTPS
Basic Authentication
Rate limiting
Host validation
Path traversal protection
Request & resource limits

Server

TCP sockets
Thread pool
Connection limits
Timeouts
Logging
Health endpoint

Deployment

Ubuntu
systemd
Let's Encrypt
Non-root execution
Certificate renewal
Service hardening

Security is approached as a layered system: individual safeguards address different risks instead of relying on a single mechanism.

TLS Limits Validation Rate Limiting Auth

What I learned

Implementing the server myself gave me a much clearer understanding of how HTTP works in practice. Instead of relying on a framework to handle the details, I had to work directly with requests, headers, connections, and status codes, and understand how each part fits into the protocol.

The project also showed me how closely software development, security and infrastructure are connected.

01 / SWITCH — A Pixel Platformer

From logic
to gameplay.

Developed as part of a programming course, this project gave me the opportunity to deepen my understanding of object-oriented programming by applying it to something interactive and fun to build.

I started with simple shapes and focused first on understanding and implementing the underlying game logic and physics — movement, gravity, jumping and collision detection.

From that foundation, the game grew into a multi-level platformer with scrolling, enemies, different game states, lives and persistent highscores.

Under the hood

Game Logic

Movement · Gravity · Game Physics · Collision Detection

Structure

Player · Level · Enemy · GameState

Gameplay

Scrollable Levels · Lives & Respawning · Persistent Highscores

Building from the core out

I developed the game iteratively, starting with a small playable foundation before adding more systems. Core movement, physics and collisions came first, followed by scrolling, levels, game states, enemies and scoring. Visual polish was deliberately secondary until the underlying mechanics worked reliably.

What I learned

Working on the game gave me practical experience with object-oriented design, especially in structuring separate components so they could interact cleanly as part of a larger system.

Designing the game around clearly separated components made it easier to manage and evolve the codebase. At the same time, implementing movement, physics, and collisions gave me a better sense of how much coordination is required behind even relatively simple gameplay.

A little more
about me.

class MarijaTepic {

  // Curious by nature, technical by choice.

  constructor() {
    this.role = "Computer Science Student";
    this.location = "Switzerland";
  }

  education() {
    return [
      {
        institution: "FHNW University of Applied Sciences",
        program: "BSc Computer Science",
        period: "2025 — 2029",
        status: "in progress"
      },
      {
        institution: "Graz University of Technology",
        program: "BSc Physics",
        period: "2017 — 2021",
        status: "unfinished"
      },
      {
        institution: "Bundesgymnasium Perau",
        qualification: "Matura",
        period: "2009 — 2017",
        status: "completed"
      }
    ];
  }

  workExperience() {
    return [
      {
        role: "Sales Associate",
        company: "Coop Genossenschaft",
        period: "2024 — present"
      },
      {
        role: "Receptionist",
        company: "Boutique Hotel Goldenes Lamm",
        period: "2023 — 2024"
      }
    ];
  }

  skills() {
    return {
      programming: ["Python", "Java"],
      web: ["HTML", "CSS"],
      databases: ["PostgreSQL"],
      tools: [
        "Git",
        "Linux",
        "VS Code",
        "IntelliJ IDEA",
        "DBeaver"
      ],
      platforms: ["Oracle Cloud Infrastructure"],
      creative: ["Adobe Creative Cloud", "Processing"]
    };
  }

  languages() {
    return {
      German: "Native",
      Serbian: "Native",
      English: "C2",
      Italian: "Basic",
      Russian: "Basic",
      French: "Basic"
    };
  }

  interests() {
    return {
      performingArts: ["Dance", "Acting", "Singing"],
      languages: "Learning and speaking new languages",
      writing: ["Modern Poetry", "Classical Poetry", "Fiction"],
    };
  }
}

Have an idea, an opportunity,
or simply want to say hello?

tepic.marija@proton.me