Guilherme Colombo
Full Stack Software Engineer
Hello. My name is Guilherme Colombo. I am a software engineer focused on building full-stack SaaS products from scratch. I work with JavaScript, Python, C#, C++, ASP.NET, Node.js, Express, and related technologies. I design practical databases, build web systems and APIs, deploy to the cloud, and ship production-ready software end to end.
Currently in the Works
Balance Ledger DatabaseC# · .NET · ASP.NET Core A high-performance ledger and projection system I built from scratch to track balances over time. At its core is a custom time-indexed B-tree that can instantly answer questions like “what was the balance then?”, “what will it be later?”, and “will this future transaction break something?”. It goes beyond basic accounting by understanding the full timeline of transactions, letting it catch problems like negative inventory or insufficient funds before they happen. While it works great for personal finance, the same engine applies to inventory, assets, stock, and any system where balances change over time. Most systems don’t just care about the current balance. They need to know what the balance was, what it will be, and whether planned actions will cause problems later. A future payment might overdraw an account. A scheduled order might push inventory negative. These questions need fast answers. What’s really needed is an engine that does this automatically, one that keeps balances up to date at all times and can answer “what happens if…?” instantly, even across long timelines. Not by replaying transactions or running batch jobs, but by maintaining the right data as changes happen. FinanceDB is built on a time-ordered B-tree that naturally keeps balances correct as the tree changes. Transactions are stored by time, and every node stores the total balance of everything beneath it. When a transaction is inserted, updated, or removed, the normal B-tree traversal already walks the exact path needed — so recalculating balances is just part of that process. Because each node knows the balance of a whole time range, the system can answer balance and projection questions by skipping over large sections of the tree. That same information makes it easy to detect when a balance would go invalid at any point in the future. |
|
SiteBarrier - Website Limit & AnalyticsPostgreSQL · Node.js · Express · Stripe · Google OAuth · Docker SiteBarrier is a full-stack Chrome extension that combines strict site blocking with accurate, attention-based analytics. It tracks real active time per site, turns it into clear dashboards (day/week/month views, top sites, trends), and makes the results usable by tying them directly to limits, schedules, and always-block rules. Most blockers are interchangeable; the difference is whether the data is trustworthy enough to drive decisions. If measurement is vague or inflated, you end up tuning limits blindly and the product becomes a temporary speed bump instead of a system that helps you change habits. A Manifest V3 service worker listens to tab and window focus signals to build browsing sessions based on actual attention, not just page loads. Those sessions are aggregated into rollups that power the charts and rankings, with settings synced across devices. Enforcement is handled separately using declarativeNetRequest rules that efficiently intercept and redirect blocked sites to a local block page you can customize. For the full-stack side, sessions can be persisted to a backend with authenticated endpoints and a Postgres store optimized for analytics queries, so you get longer history and faster reporting than a purely local extension. |
|
Shipped Products
SeshLog - Time Tracking AppFlutter · Dart · SQLite A time tracking app with local storage designed to help users log and manage their time effectively, be able to export and freely update their data as they wish, and sort / filter through their lifetime data with ease and speed. Because modern solutions are NOT good! Unintuitive UI, lack of flexibility, ads and plans being forced down your throat, forced cloud storage, come on! Users should have full control over their data. Users can create multiple activities and track them simultaneously. When an activity is stopped, a session object is created and its raw data is persisted to a local SQLite database. Each session is uniquely identified by a UTC ISO-8601 timestamp and the associated activity ID. Activity IDs are used instead of activity names because names are user-editable. This allows activity updates to be handled by modifying a single row in the activities table, without needing to traverse or rewrite all related session records. |
|
Disk JumperGodot · GDScript A simple arcade platformer where you jump on spinning disks! I was eager to play around with 3D physics and procedural level generation. I also wanted to learn about the pipeline from Godot to shipped app on mobile devices. Godot is pretty versatile and 4.X releases have a mature 3D engine. For procedural generation, the platforms are spawned in a random position within a range of 45 degrees in front of the previous platform. The disks are spawned using guassian distribution to define their size, speed, and deterioration rate. Every new platform jumped is a higher difficulty. |
|