Experience(5)
- Tutor first- and second-year FEUP engineering students in mathematics, physics, and programming
- Conduct weekly office hours to help students with problem-solving and coursework
- Lead a 10+ member team building AI projects and technical workshops
- Manage the department's technical infrastructure and roadmap
- Solo-built an AI-powered study platform from product design to production infrastructure
- Implemented course workspaces, materials, notes/drawings, AI chat, RAG-assisted workflows, exercise solutions, Stripe billing, usage metering, and feature limits
- Grew @studywithrocco organically on TikTok to 1,000 followers and 500,000 views through study-tip content
Deprecated: I stopped working on Uniâs Easy, and I am no longer actively developing it. I still love the idea of the product as an app that organizes your learning, but it just wasnât the right form factor nor the right UX. I will most likely come back to a product with a similar intent to this in the future.
The demo below was posted on August of 2025. It shows some of the core features, though itâs the last recorded demo that I have.
Marketing and Growth
I also ran the marketing through a TikTok account (@studywithrocco). I posted study tips and got a few viral videos with completely organic content, which I used to promote the app.
What I built
I wanted to replace the fragmented stack many students (including me) use. The project included:
- Course/module management with rich metadata and instructors/links
- Materials and exercise handling, including PDF/file workflows
- Rich notes and drawings
- AI chat and AI-assisted workflows
- Exercise solutions, including AI-generated solution flows
- Public sharing for notes and drawings
- Pomodoro, focus todos, and progress tracking
And of course:
- Pricing tiers, billing portal integration, usage tracking, and feature limits
- A full marketing website (which I actually loved how it turned out, though I donât have it live anymore)
Technical scope
I used
Next.js,
PostgreSQL, and
Docker, with
Trigger.dev for the long background jobs. I handled the PWA setup, auth, and all the
Stripe billing logic myself. I also did the AI side, including the RAG logic for retrieval.
I did the product design and UX for the whole thing tooâmaking sure the public sharing and usage tracking actually felt right.
- Build, deploy, and maintain client web applications and infrastructure, including Linux servers, CI/CD pipelines, backups, and disaster-recovery flows
- Deliver custom products with SvelteKit, PHP, Docker, and Cloudflare, handling both application development and production operations
Under Dias Solutions I run two related services:
Web Development - Building custom web products for clients. I usually work with
Next.js,
SvelteKit, or
PHP, depending on what the project needs.
Infra by Rodrigo Dias - Personal infrastructure management service at infra.rgo.pt. I handle the technical stack so clients donât have to, covering performance optimization, networking, and observability. I provide a direct line for support and use
Synology automated systems for backups and 24/7 monitoring.
- Built core features for Cybersecure.pt, a cybersecurity SaaS for Portuguese SMEs: real-time dashboards, assessment workflows, PDF reports, email delivery, RBAC, MFA/WebAuthn, and multi-tenant access control
- Iterated on a modern Next.js, TypeScript, DrizzleORM, MariaDB, Express.js, Socket.io, Stripe, and AWS S3 stack
Note: The domain
cybersecure.ptnow hosts a new platform that NECHO TECHLAW is building. The project I worked on has been archived and replaced with a different product.
I worked for 2 years at NECHO TECHLAW helping build Cybersecure.pt, a cybersecurity platform for Portuguese SMEs. The company has since pivoted to a different product and replaced the version I built.
Started as a web development intern doing frontend work, later moving to a part-time full-stack role where I took on more backend responsibility. I was responsible for the core application logic and integrating third-party services like
Stripe and
AWS S3.
I implemented key features such as:
- Real-time dashboards and assessment data visualization for end-users and administrators
- PDF report generation and email delivery using
React Email templates - Database schema design and query optimization with
DrizzleORM - Magic link, WebAuthn passwordless, and MFA (TOTP) authentication and role-based access control (superadmin, admin, employee)
- Stripe payment integration for subscription management
- AWS S3 integration for secure assessment file uploads and downloads
- Internationalization (i18n) support for Portuguese and English
- Multi-tenant data architecture with company, division, and user hierarchy
- Comprehensive API routes for assessments, users, roles, notifications, and webhooks
- Metadata management (with multilingual support as well)
- Web interfaces for multiple user roles across customer, admin, and internal workflows
- Database at-rest encryption and backup flows
- VPS-hosted services designed to minimize third-party data exposure
Projects(9)
- Building regional fashion search across stores from natural-language queries, product links, and images
- Developing a web and mobile catalog platform with Postgres, Meilisearch, pgvector/CLIP similarity, source ingestion, and deterministic ranking
Montra is fashion search across stores available in a shopperâs region. It supports normal and AI-assisted queries, pasted product links, and image-based discovery, then returns filterable results with sizes, materials, colors, prices, availability, and retailer links.
The web marketplace uses TanStack Start and
React, backed by a Hono API and
PostgreSQL catalog. Meilisearch handles fast lexical retrieval, while pgvector and CLIP power visual similarity. The ingestion pipeline normalizes products and images from many retailers without making checkout or exact stock promises Montra cannot support.
Search by image and product link


- Building a daily reasoning workout around one shared problem, one considered answer, and a structured mirror of how each person reasoned
- Developing the web, native, API, evaluation, and content platform as a production-minded TypeScript monorepo
Unprompted is a daily workout for reasoning: one shared problem each day, one considered answer, and a structured mirror of how you reached it. The result surfaces the crux of the answer, reasoning quality, common traps, calibration, and a solution to study after committing to your own approach.
The platform combines a
Next.js / React web app, an
Expo / React Native client, a Hono API,
PostgreSQL with Drizzle, and separate content, extraction, evaluation, email, and API-contract packages. It also includes accounts, streaks, history, an archive, spoiler-safe public sharing, accessibility checks, and data-rights controls.
Daily problem and feedback
Shareable result

- Building an offline-first survival computer for maps, emergency knowledge, secure notes, local search, cached feeds and weather, and practical sensor tools
- Integrated downloadable knowledge packs, on-device AI/RAG, full-text search, offline maps, private storage, and resumable downloads in one mobile app
Ark started as our third-place CodeSpring 2026 project and grew into an open-source, offline-first survival computer for iOS and Android. It brings maps, emergency knowledge, secure notes and documents, local search, cached feeds and weather, and practical sensor tools into one app that remains useful when the internet disappears.
The app is built with
Expo,
React Native, TypeScript, and
SQLite. It supports downloadable map and knowledge packs, PDF/ZIM/HTML content, full-text search, on-device AI/RAG, encrypted backups, resumable downloads, saved places, route drafts, and phone-sensor utilities.
Offline toolkit




- Built a production-minded SvelteKit starter with connected auth, billing, realtime data, AI, product UI, tests, and deployment
- Added a guided kickstart workflow that helps coding agents turn the foundation into a smaller, coherent product instead of a renamed template
Product Plate is a public
SvelteKit starter designed to become a real product rather than remain a showcase template. It connects authentication, billing, realtime data, AI, teams, notifications, developer tooling, product UI, tests, and deployment in one coherent foundation.
The default stack uses Svelte 5, Convex, Better Auth, Autumn, Tailwind CSS, shadcn-svelte, Bun, and Cloudflare Pages. A guided START_HERE.md kickstart helps a coding agent select the relevant surfaces, remove unused options, establish the new product identity, and verify the smallest complete product loop.
Connected product foundation


- Built a Typefully/Buffer-style scheduler that runs as a single Go binary with an embedded SvelteKit frontend and SQLite persistence
- Implemented post scheduling and publishing flows for X, Mastodon, Bluesky, Threads, and LinkedIn
- Added account settings, media-library workflows, a SQLite-backed job queue, and multi-tenant RBAC
- Used coding agents end-to-end to explore AI-assisted development on an unfamiliar Go codebase
OpenPost is an open-source alternative to tools like
Typefully and Buffer. I built it because most self-hosted alternatives like
Postiz were just too heavy and bloated for what I needed. I wanted something that was completely self-contained, where you could run a single
Go binary on your own server without worrying about data leaving your machine or paying for monthly subscriptions.
The app uses a
SvelteKit frontend,
SQLite for local persistence, and can run with
Docker. It currently supports publishing to
X,
Mastodon,
Bluesky,
Threads, and
LinkedIn.
This is still in early development but is already functional for scheduling and publishing posts.
Screenshots



- Produce Portuguese STEM and computer-science explainers for FEUP students, covering calculus, RISC-V assembly, formal languages, algorithms, and theory of computation
- Own the full publishing workflow: topic selection, scripting, examples, recording, editing, thumbnails, and distribution
I use this channel as both a teaching outlet and a forcing function for learning. If I can explain a topic clearly, I usually understand it much better myself too. Most of the videos are in Portuguese, as they are primarily aimed at helping my peers at FEUP.
Selected videos
- Built a privacy-first social platform for my high-school capstone, centered on friend-only sharing and QR-based connections
- Shipped an Expo/React Native mobile app with private posts, maps, rewind summaries, real-time chat, Stripe-powered credits, and push-notification flows
- Built a separate PHP/MySQL landing site and backoffice with multilingual pages, waitlist/contact flows, and usage dashboards
The Actual World was my Professional Aptitude Project for high school. It consists of a mobile app (the-actual-world/mobile) and a separate landing/admin site (the-actual-world/landing).
The mobile product was built with
Expo / Expo Router +
React Native,
Supabase,
PostgreSQL,
Stripe, maps, QR codes, and push-notification tooling. The landing site and backoffice were built separately in
PHP /
MySQL, with multilingual content, download/waitlist/contact flows, and admin analytics.
The technical setup involved push notifications, QR code generation for secure connections, and a custom backoffice in PHP for analytics.
Onboarding and account creation
I designed a guided onboarding flow to introduce the appâs focus on privacy and authentic sharing.
Auth and account recovery
Privacy, security, and account controls
Friends, private graph, and feed
Posting flow and social interactions
Posts supported text, images (automatically captioned), locations, tagged users, and comments.
Maps and rewind summaries
Browse memories on a map (with clustering) and generate rewind-style summaries from recent activity or journal/write personal notes.
Real-time chat
Credits and premium mechanics
I experimented with a credit system and paid mechanics too, including buying and gifting credits, which tied into the Stripe/payment side of the product. This was so that the social media didnât need to be supported by ads, but instead pay per what you use.
Settings, personalization, and the landing/admin side

- Published an offline-first Android app for Portuguese shift workers, reaching 100+ downloads from nurses in Portugal
- Implemented shift scheduling, overtime/night-shift pay logic, municipal holidays, and monthly reports
Started as a family tool, then grew into a public Android app for Portuguese shift workers. I wanted to handle the annoying real-world details around overtime, night shifts, and holidays without needing a server or a complex login.
The stack is
Framework7 +
Svelte 4 +
Vite +
Capacitor, with local persistence and native packaging. The app includes calendar-based shift management, municipal-holiday configuration, and automated monthly reports.
- Manage a secure Synology NAS with tons of other interconnected selfhosted services
- Maintain a declarative infrastructure repo for NixOS and nix-darwin machines (personal and servers)
Running my own personal infrastructure stack since 2022 (see my nix-config for more context on it).
Outside of my nix-config, I also manage a Synology-based homelab that runs the self-hosted apps and services my family uses, including
Synology Drive,
Immich,
Jellyfin,
Audiobookshelf, and
Paperless-ngx.
I eventually want to move my Synology machine to NixOS as well whenever I find the time.
University Projects(6)
- Built a global register allocator that merges live ranges into webs, constructs an interference graph, and colors it under a bounded register count
- Implemented baseline coloring, bounded spilling, live-range splitting, DSatur ordering, graph-class fast paths, and guarded branch-and-bound refinement
- Added a custom free-split recovery mode, marker-preserving output, DOT graph exports, deterministic integration tests, and presentation-ready visualizations
This
C++ compiler back-end tool takes variable live ranges, merges compatible ranges into webs, builds an interference graph, and allocates those webs to a limited set of physical registers.
Beyond the supplied greedy baseline, our custom allocator combines graph-class shortcuts, DSatur ordering, and a bounded branch-and-bound pass for smaller graphs. When coloring cannot avoid memory, the tool supports explicit spilling and marker-preserving live-range splitting, including a free_split recovery strategy that evaluates candidate splits and keeps only measurable improvements.
Interference graph examples





- Co-built a framework-free gym management platform in strict PHP, SQLite, semantic HTML, layered CSS, and vanilla JavaScript/AJAX
- Implemented class enrollment and waitlists, trainer/member/admin workflows, personal training, equipment reservations, memberships, notifications, and analytics
- Added QR membership check-in, physical cards, a Bearer-authenticated JSON/XML REST API, migrations, audit logs, backups, session controls, and security hardening
ARC Gym is a full gym-management platform built without application or CSS frameworks:
strict PHP,
SQLite through PDO, semantic HTML, layered CSS, and vanilla JavaScript/AJAX.
Members can manage memberships, browse and join classes, enter waitlists, reserve equipment, book personal training, review sessions, receive notifications, and present a QR gym pass. Trainers manage availability, rosters, profiles, and analytics; administrators manage the full catalog, users, equipment, promotions, landing content, audit logs, backups, API clients, and check-ins.
The security layer includes prepared statements, output escaping, CSRF tokens, password hashing, session rotation, role guards, upload validation, hashed API tokens, and rate limits. A public REST API supports JSON and XML, while a numbered SQL/PHP migration system keeps schema and seed data reproducible.
Public and member experience





Trainer and admin tools





- Modeled reviewer-to-paper assignment as a capacitated bipartite flow network with expertise, review-count, and reviewer-capacity constraints
- Implemented Ford-Fulkerson and Edmonds-Karp in C++, plus batch/interactive workflows, CSV parsing, assignment exports, and reviewer-absence risk analysis
- Documented graph construction, complexity, and algorithm tradeoffs with generated Doxygen and Graphviz visualizations
This
C++ tool turns scientific-paper review assignment into a maximum-flow problem. Submissions and reviewers form the two sides of a bipartite network; capacities encode minimum reviews per paper, maximum workload per reviewer, and primary/secondary expertise rules.
Both Ford-Fulkerson and Edmonds-Karp are available so their behavior and complexity can be compared on the same datasets. The application supports an interactive terminal UI and deterministic batch mode, writes assignments to CSV, and can test how removing a reviewer affects coverage.
Flow-network model


- Co-built a campus peer-help app that matches nearby FEUP students by subject, coordinates live help sessions, and rewards helpers with a karma economy
- Shipped SOS requests, indoor campus maps, real-time offers and chat, QR session verification, reviews, badges, streaks, leaderboards, moderation, and offline-aware flows
- Worked across Expo/React Native, TypeScript, Convex, CI/CD, unit/integration tests, automated Android E2E recordings, release management, and project documentation
Clutch connects FEUP students who are stuck with nearby peers who can help in person. A student chooses a course unit and broadcasts an SOS; available helpers can respond, meet on campus, verify the session by QR code, chat, and review one another afterward.
We built the mobile app with
Expo,
React Native,
TypeScript, and
Convex. The product also includes a karma economy, badges and streaks, course/global leaderboards, user blocking, quiet hours, multiple FEUP buildings, capacity information, offline behavior, and a separate privacy-conscious admin analytics dashboard.
App walkthrough



- Co-built a pixel-art tower-defense game and small game engine in C for MINIX, driven by timer, keyboard, mouse, graphics, and serial-port interrupts
- Implemented a 60 Hz simulation/render loop with levels, waves, tower upgrades, enemy abilities, projectile pools, menus, profiling, and custom PNG-to-XPM tooling
- Added two-player UART multiplayer with attacker/defender roles, a binary synchronization protocol, handshakes, retransmission, and shared game-state events
Ninjix was our final Computer Laboratory project: a complete tower-defense game written in
C for MINIX 3, without a game framework. The codebase acts as a small event-driven engine layered over the courseâs hardware work.
The game normalizes hardware interrupts into app events, runs gameplay at 60 Hz, renders through a back buffer, and manages towers, eight enemy types, projectiles, waves, upgrades, targeting modes, menus, overlays, and reusable sprite resources. We also built developer tooling for PNG-to-XPM conversion, Doxygen/Graphviz documentation, and section-level profiling with FlameGraph output.
Serial multiplayer
The multiplayer mode links two machines over COM1 at 115200 bps. One player attacks by spending elixir to spawn enemies; the other defends by placing and upgrading towers. A custom binary protocol handles discovery, role negotiation, gameplay events, pause synchronization, and restart decisions.
- Co-built a TankTrouble-inspired 2D local tank combat game in Java with Lanterna, including local 1v1 multiplayer and single-player AI
- Implemented bouncing projectile physics, ricochets, destructible and indestructible walls, multiple maps, a map editor, menus, settings, sound, music, and particles
- Structured the game around MVC, state and event-driven architecture, design patterns, Gradle automation, JUnit/jqwik/Mockito tests, JaCoCo, Pitest, and Spotless
TankTussle is a TankTrouble-inspired local tank combat game built with
Java and Lanterna for LDTS 2025/26.
The game supports local 1v1 multiplayer and single-player matches against AI opponents with three difficulty levels. Combat centers on bouncing projectiles, ricochets, destructible and indestructible walls, multiple arena layouts, particle effects, sound, music, pause and victory flows, customizable controls, and a built-in map editor.
Internally, the project uses MVC, explicit game states, an event-driven loop, and patterns such as factory method, observer, singleton, facade, state, and template method. The Gradle toolchain includes JUnit, jqwik, Mockito, JaCoCo, Pitest, and Spotless for testing, mutation analysis, coverage, and formatting.
Game screenshots



Education(2)
Activities
- AI Department Lead at ACM FEUP Student Chapter
- Educational YouTube channel on CS & math topics (in Portuguese)
- Academic Tutor at ConsultĂłrio FEUP
CV Highlights
- Relevant coursework: Algorithms & Data Structures, Operating Systems, Databases
Year 1: Linear Algebra, Math Analysis I & II, Discrete Math, Fundamentals of Computer Systems, Programming Fundamentals & Advanced, Computer Architecture, Theory of Computation, Physics I & II
Year 2: Algorithms & Data Structures, Databases, Operating Systems, Software Design & Testing, Algorithm Design, Software Engineering, Statistical Methods, Web Languages, Computer Lab, Introduction to Quantum Mechanics, Professional Communication
Year 3: HCI, DB & Web Apps Lab, Computer Networks, Security, Functional & Logic Programming, Parallel Computing, Compilers, Computer Graphics, AI, Capstone Project
Activities
- Won TECLA 2024 competitive programming tournament (1st place)
- Helped organize a CS:GO and CS2 LAN tournament
CV Highlights
- Final grade: 19.9/20, top of class
- Self-taught programming during high school
Completed the IT and Multimedia Technologies track at Colégio de Gaia. Subjects covered included Computer Applications, Fundamentals & Computer Architecture, Programming Techniques, Database Implementation, Internet Programming, Multimedia Technologies, Digital Games, and a final Technological Project.
During these years I also focused on competitive programming and organized a CS LAN tournament, which eventually led to building my first substantial projects.



Honors(4)
- In this 46-hour hackathon, we built Ark, an offline-first mobile survival app with maps, guides, wiki archives, weather caching, news, secure notes, and file management
- Implemented an on-device AI assistant using llama.rn, local embedding models, SQLite FTS, and sqlite-vec to retrieve relevant offline knowledge
My first hackathon experience: a focused 46-hour sprint sponsored by
where my team built Ark, an offline-first mobile survival app. We placed 3rd and turned the prototype into an open-source project that we are continuing to develop.
What is Ark?
Ark is designed for situations where internet access is unreliable or unavailable. It brings together offline maps, wiki archives, survival and health guides, cached weather forecasts, offline news, encrypted notes, file management, and practical device tools such as compass, coordinates, level, and emergency utilities.
The app also includes an offline AI assistant that runs directly on mobile. It can search across the userâs downloaded guides, notes, documents, maps, RSS items, cached weather, and wiki content to answer questions using local context, in a local environment.
Tech Stack
- Mobile:
React Native / Expo, Expo Router - State:
Zustand - Offline Storage:
SQLite, SQLite FTS, sqlite-vec - Security: SQLCipher, SecureStore, Local Authentication
- AI: llama.rn, local GGUF chat models, local embedding models, RAG
- Maps: MapLibre React Native, offline map regions
- Content: offline guides, PDF/HTML readers, ZIM archive support, RSS feed + Weather caching and reading
- Device Features: Expo Sensors, Location, Battery, native OCR module, native ZIM reader module
What I Learned
This hackathon taught me how much can be built when the I focus intensely on a single product/thing, even for a short period of time. My mind was literally thinking or doing things related to Ark for the entire duration. It also taught me an important execution lesson: in hackathons, a polished core flow and clear pitch usually matter more than building every possible feature (even if they do end up pretty polished which was our case).
Ark was technically ambitious and already useful by the end, but we spent too much time debugging edge cases and implementation details that judges never saw. For future hackathons, I would prioritize the strongest happy path first, polish the demo earlier, and only then expand the feature set.
Ark is now open source at github.com/rodrgds/ark.




- Top of class, IT and Multimedia Technologies, ColĂ©gio de Gaia â final grade: 19.9/20

- 1st place out of 360 teams, TECLA 2024 â Aveiro Multilanguage Computing Student Tournament
- Top 25 teams in final phase â solved algorithmic problems in Python and C++ under time pressure
My teammate and I won two laptops for our performance in the final round, where we solved algorithmic problems in
Python and
C++.




- 2nd place, TECLA 2023 â Aveiro Multilanguage Computing Student Tournament
My teammate and I were awarded an
Arduino kit for our performance in the final round.
Certifications/Courses(7)
CS50âs Introduction to Artificial Intelligence with
Python. Covers search algorithms, knowledge representation, uncertainty, optimization, machine learning, neural networks, and natural language processing.
AI governance certification covering generative AI, global AI laws, compliance obligations, AI risk management, and governance frameworks. 8 modules, 1.5 IAPP CPE credits.
Googleâs Cybersecurity Professional Certificate on Coursera. Covers security foundations, SIEM tools, Python for security, and incident response.
ISO 27001:2022 Information Security Management Systems lead auditor course. Covers ISMS implementation, audit planning, and risk management.
- EF SET (Standard English Test): C2 Proficient, 78/100
MITâs âThe Missing Semester of Your CS Educationâ course. Covers command-line tools, debugging/profiling, Git, Vim, and other practical developer skills often overlooked in CS curriculum.
Completed both the 2020 edition (in August 2023) and the 2026 edition (in May 2026).
Topics covered: Shell, Command-line, Dev Tools, Debugging, Git, Packaging, Agentic Coding, Beyond Code, Code Quality, Shell Tools, Vim, Data Wrangling, Version Control, Metaprogramming, Security.
CS50âs Introduction to Computer Science. The course that got me seriously into programming at 14. Covers
C,
Python,
SQL, web basics, algorithms, and data structures.

























