NICOLAS VYČAS NERY

Software Engineer — Systems, Document Pipelines, Developer Tooling

Rio de Janeiro, Brazil · Available for contract (PJ) engagements, remote

UTC−3 — overlaps European afternoons

vycasnicolas@gmail.com

LinkedIn

GitHub

git.gay

SUMMARY

Software engineer, eight years, working remotely with teams in the UK and Brazil, across TypeScript, C#, Rust and C++. Focused on systems that have stopped being cheap to change: replacing a conditionally-branching report generator with data-driven configuration cut new setup from two weeks to one day. Improvements are measured, correctness is made checkable through visual PDF diffing, deterministic end-to-end suites and fuzzing, and game engines in C# and C++26 fill the time outside paid work.

TECHNICAL SKILLS

Languages: TypeScript, C#, Rust, Python, C++, Zig, C, Java, Solidity, SQL

Backend: Node.js, NestJS, Django, TypeORM, REST API design, RabbitMQ, Redis, WebSockets

Frontend: React, Next.js, Zustand, Tailwind CSS

Infrastructure: Docker, AWS S3, GitHub Actions, PostgreSQL, Bun monorepos

Testing: Cypress, E2E automation, snapshot testing, visual regression, libFuzzer

Graphics & Systems: Vulkan, WebGPU, OpenGL/GLSL, WebAssembly, EnTT (ECS), Unity

Data: pandas, NumPy, Power BI

PROFESSIONAL EXPERIENCE

Associate Software Engineer | Scissero (UK/London - Remote)

July 2025 – Present

Rebuilt the report generation engine from branching control flow to a data-driven model. Distributor variants of a single fact sheet family had been produced by one file branching conditionally on report type; the replacement resolves variants from data, with no branching in the generator. Together with the configuration tooling below, this cut new configuration setup from ~2 weeks to ~1 day.

Maintain ~300 report configurations against client-supplied source data treated as immutable, on a 4-5 engineer team.

Replaced manual PowerPoint production with automated PDF/PPTX generation on scheduled jobs, up to 3x daily, under a minute per report.

Own all internal tooling for the team — debug and inspection tooling, chart configuration, a visual PDF diff catching colour and layout regressions text comparison misses, backed by snapshot tests as a tripwire. The diff has surfaced errors in the client-supplied source data itself, before generated output reached distribution. Used daily by every engineer.

Use Claude Code and Cursor daily in production work, reviewing every generated change before it ships. Peer review; onboarded and trained new engineers.

Senior Full Stack Engineer (Contract) | Surik Digital Business (Curitiba/Brazil - Remote)

Jan 2025 – July 2025

Sole engineer on the engagement: scoped, architected, built, and delivered a multi-tenant social proof notification platform end to end.

Separated the system into distinct surfaces by trust level and load profile — public embeddable widget, customer-facing application, and administrative dashboard — decoupled over RabbitMQ so public traffic and authenticated operations shared no failure path.

Real-time event fan-out over WebSockets to visitors on client sites, with Redis holding recent events for replay to newly connected clients.

Per-tenant configuration and styling resolved server-side from a public embed key, keeping client integration to a single script tag.

Blockchain & Full Stack Developer (Contract) | DITAVIA (Rio de Janeiro/Brazil - Remote)

Jan 2024 – Dec 2024

Built non-custodial wallet integration across EVM chains — client-side key handling via MetaMask and compatible providers, with support extended as new wallets gained adoption. Initiated the work on a three-engineer team under mutual code review.

Owned end-to-end test coverage for DApp and smart contract flows using Cypress, with execution automated through GitHub Actions — deterministic suites over on-chain interactions, where failures indicated real regressions rather than flake.

Migrated an internal business management platform — money in/out, clients, employees — from a Django/Java stack to React/TypeScript, covering ~12 screens and associated modal workflows.

Software Engineer (Contract) | Beta Bit (Curitiba/Brazil - Remote)

Aug 2022 – Dec 2023

Built the document generation system for a book publishing platform (lifestories.com, live) — one document model serving two output paths: fast section previews rendered via Puppeteer for in-browser reading, and full-book output meeting a commercial printer's strict production specification.

Implemented the typesetting rule layer governing page-break behaviour — headings kept with following content, image placement constraints, and chapter break handling — so generated books held layout invariants without manual correction.

Built the authoring pipeline end to end: CKEditor integration persisting structured content to PostgreSQL, feeding the generation service, served back to an in-page PDF viewer.

Implemented Figma designs against a NestJS/PostgreSQL backend with React and Tailwind.

Undergraduate Researcher | CEFET/RJ (Rio de Janeiro/Brazil)

Nov 2022 – Nov 2023 (concurrent with Beta Bit)

Built a VR orientation and mobility environment in Unity letting visually impaired users learn a physical space's layout before visiting it — head tracking driving spatial audio cues and hand tracking driving a virtual cane, using the headset as a 6DOF tracker rather than a display.

Developed a tile-based geometry optimization for the environment, reducing vertex count by 89.09%.

Tested with visually impaired participants; published and presented the work at WebMedia 2023 (see Publications below).

Data Science Intern | Tribunal de Contas da União (Rio de Janeiro/Brazil - Remote)

Aug 2020 – Aug 2022

Built Power BI reporting integrations over federal audit data.

Wrote Python analysis pipelines (pandas, NumPy, matplotlib) over the same data, beyond what the role required.

Teaching Assistant, Data Structures | CEFET/RJ (Rio de Janeiro/Brazil)

Mar 2022 – Oct 2022

Assisted students with C and C++ across the data structures course — pointers, sequential and dynamic linear structures, sorting algorithms, and non-linear structures including trees.

Full Stack Developer | Konzup (Rio de Janeiro/Brazil - Remote)

Aug 2018 – Aug 2020

Built the original travel market intelligence system with one other engineer, surfacing demand patterns from Google Trends and third-party travel data so agencies could plan marketing against forecast seasonality.

Covered the full stack — external API ingestion, service layer, REST API design, asynchronous messaging over RabbitMQ, and frontend state and layout.

Still in production and actively developed six years on (konzuphub.com), now expanded well beyond the original scope by subsequent teams.

PROJECTS

BetaSharp — Main Contributor, 2026–present

C# reimplementation of Minecraft Beta 1.7.3 from decompiled Java. 852 of the project's 1,494 commits.

Migrated items, blocks, and entities from hardcoded subclass hierarchies to data-driven composition — 127 item subclasses, 27 entity subclasses, and all block subclasses replaced by shared types composed from JSON-declared capability slots, enabling runtime datapack layering.

Deleted 106 static item accessors in favour of registry lookup by name, fixing ~148 call sites across 66 files and 141 recipe definitions. The strict lookup surfaced a reentrant static-initialisation cycle the old code had been silently swallowing.

Moved entity rendering from per-frame CPU vertex transformation to GPU instancing via SSBOs — geometry uploaded once, pose matrices per instance. 11 → ~200 fps at 2,000 entities.

Caught an AI-generated rendering change that assumed GL 4.3 shader storage buffers while the application requested a 4.1 context — code that compiled cleanly and would have failed at runtime on conforming drivers.

Replaced the legacy immediate-mode UI tessellator with a batched shader pipeline using a scissor stack for nested clipping. Debugged a vsnprintf format-string segfault crashing overlays on Linux/Wayland.

Wrote deterministic test suites over redstone circuit logic and block ticker lifecycles.

https://git.gay/betasharp-official/betasharp

OmniBlock — Main Contributor, 2026–present

Hard fork of BetaSharp above, diverging on rendering, networking and modding. World-generation parity with Beta 1.7.3 preserved.

Hierarchical terrain level-of-detail system with dynamic scale budgets, remote tile caching, and chunk fade transitions. Climate sampling propagates biome tint across LOD boundaries without activating gameplay chunks.

Rendering moved to WebGPU — GPU-side lighting, render batching, packed UV coordinates, mipmapped terrain. Dynamic block model compiler handling stairs, fences, and crossed plants including hit-height calculation.

Embedded the Luau VM for client- and server-side modding, cross-compiled via LLVM-MinGW, with world generation and lifecycle control delegated to the scripting layer.

Diagnostic infrastructure for the LOD system: automated visual captures, spatial comparisons, and regression tests over lighting interpolation across chunk boundaries.

github.com/tomast1337/omniblock

RCT3++ — Creator & Lead Developer, 2026–present

Early-stage clean-room reimplementation of RollerCoaster Tycoon 3 in C++26, built to load the original game's proprietary assets and saves. Far from feature-complete against the original.

Parsers for the game's undocumented archive formats — textures, meshes, skeletal and spline animations, fonts, GUI skins, localized string tables — plus a reader for park saves covering terrain, paths, objects, finance, and weather.

Vulkan renderer with day/night GPU lighting, dynamic skies, instanced scenery, skeletal vertex skinning, environment mapping, and screen-space water refraction.

Entity simulation over EnTT (ECS): guest pathfinding, party clustering, multi-station coaster logic, and a park economy.

Retained-mode UI toolkit driving the original game's skins — scalable layouts, text selection, statistical graphing, multi-language support.

Unit tests over synthetic data and continuous fuzz testing (libFuzzer) across the parsed asset formats.

github.com/tomast1337/RCT3PlusPlus

NoteBlock World — Co-Founder & Lead Developer, 2024–present

Web playback and distribution platform for Note Block Studio. 8,000+ registered users, 3,100+ community-uploaded tracks across 30+ categories.

Next.js and NestJS monorepo on Bun, with core domain logic extracted into isolated internal packages (@nbw/song, @nbw/thumbnail) to enforce TypeScript boundary separation.

Backend delivery and authentication pipeline — S3 redirect resolution, CORS for raw file downloads, proxy-aware session cookies.

State-heavy frontend surfaces using Zustand for global search and filter state, React Suspense for async hydration, and canvas-based thumbnail generation.

Presented at WebMedia 2026; won Best Demonstration in the Tools and Applications workshop (see Publications below).

github.com/OpenNBS/NoteBlockWorld

nbs-rs / nbs-player-rs — Rust, 2025

Parser and playback engine for the Note Block Studio binary format, split into format and player crates. Equivalent parser also implemented in Zig.

NbsWriter serialization back to the binary format, with chronological note sorting and differential layer-jump calculation for accurate playback.

github.com/tomast1337/nbs-rs

PuppeteerGen — TypeScript, 2025

HTML and PDF document generation through Puppeteer behind a PptxGenJS-compatible API, so systems that already build presentations can migrate their output without rewriting layout code.

Charts rendered with ECharts and custom SVG; page sizes, print CSS and inch-based positioning handled by the library.

github.com/tomast1337/Puppeter-PptxGenJS

Basalto — C, 2025–2026

Native compiler for a modernized VisualG-like language, written in C with Flex and Bison, built with a minimal C build system to avoid dependencies.

github.com/tomast1337/basalto

Pseudo-3D Racing Game — Rust, 2021–2026

Small OutRun-like game in Rust with custom GLSL shaders for road rendering.

github.com/tomast1337/pseudo-3d-racing-game

GlyphEngine — TypeScript, 2025

Fork of play.core adding npm package and TypeScript support. It renders this site.

github.com/tomast1337/GlyphEngine

PUBLICATIONS & AWARDS

Best Demonstration, WFA Prize (Workshop on Tools and Applications) — WebMedia 2026, XXXII Brazilian Symposium on Multimedia and Web Systems, Lavras/MG

"Note BlockWorld: An online community for sharing Minecraft note block music" — Bernardo Costa, Flávio Schiavoni, Rômulo Vieira, Nicolas Vyčas. Paper

2nd Place, SBC Scientific Initiation Contest — WebMedia 2023, XXIX Brazilian Symposium on Multimedia and Web Systems

"Tile-based Maps Optimization for Orientation and Mobility Virtual Environments". Paper

EDUCATION

B.Sc. Computer Science | CEFET/RJ · Completed March 2026

LANGUAGES

Portuguese (Native) | English (Fluent) | Lithuanian (B1)

CASE STUDIES

From 127 subclasses to data — BetaSharp, 2026

Why one-off code per item had to go, and why the answer was already in the codebase.

Before: every item in the game, from spades to food to armor, was its own hardcoded C# subclass. A new item meant new code.

After: one flexible item type built from reusable behaviors such as Food, Tool, Armor, Bucket and Dye, with stats, appearance and config in external data files. Adding an item now means describing it, not engineering it.

Not a new idea: other contributors had already built the registry foundation for GameModes and Recipes. Items were the third data type onto that pattern, so the decision was to follow something proven rather than invent something clever.

git.gay/betasharp-official/betasharp/pulls/13

Deleting 106 accessors — BetaSharp, 2026

What a strict lookup exposed that the old code had been silently swallowing.

Once items were pure JSON, I deleted all 106 static Item.Apple-style fields. Everything resolves through the registry by name now, as in Item.ByName("gunpowder").

That broke ~148 C# call sites across 66 files, a mechanical scripted fix, and 141 recipe JSON files, because recipes reference items as plain strings that nothing validates until server boot.

It also exposed a reentrant static-initialization cycle: Block's static constructor transitively triggered an achievement lookup for an item that had not finished loading. The old code silently returned null and moved on. The strict lookup crashed loudly.

The lesson: making failures loud instead of quiet is how you find bugs that were already there, just hiding. It ended with 677 tests green and the dedicated server booting clean with all 160 recipes loading.

git.gay/betasharp-official/betasharp/pulls/13