Whenes Oliveira / dev-components

Dev Components

The Steply design system, portfolio edition. Same token names, 4px scale and dark/light switch as Steply, plus the pieces a résumé site needs: a career log drawn as a git graph, a feature-flag migration case, repo cards and code. Every example below is live; open HTML to copy its markup.

Whenes Oliveira

Software EngineerFull Stack

  • Tubarão, SC, Brazil
  • Software Consultant at SUPERO

10+ years building, modernizing and maintaining enterprise applications: backend services, REST APIs, web and mobile apps, and legacy systems that keep running while they change.

git log --graph --career

  1. SUPERO

    HEAD 2020-11 → now
  2. TOTVS

    2023-09 → 2026-08

    Customer portal: legacy Java EE and modern NestJS side by side, switched by feature flags.

  3. Selbetti

    2022-07 → 2023-08

    Led a Java 8 → 9 migration; rebuilt a printer UI for hardware Angular couldn't run on.

Color

Values read live from the active theme

Restrained: Steply's night-console neutrals carry the page, blurple is the one committed accent. Status colors appear only as soft fills with readable text. Switch the theme in the top bar to see the light values.

Surfaces

  • --bg-appPage ground
  • --bg-baseContent area
  • --bg-surfaceCards
  • --bg-sidebarShell chrome
  • --bg-floatingToasts, menus

Text

  • --font-primaryHeadings, names
  • --font-secondaryBody copy
  • --font-mutedMeta, dates
  • --font-linkLinks

Accent & status

  • --accent-primaryBrand, primary action
  • --accent-secondaryAccent as text
  • --accent-successCurrent, done
  • --accent-warningAttention
  • --accent-dangerErrors

Graph & code

  • --graph-mainCareer lane
  • --graph-branchConsulting lane
  • --code-keywordSyntax: keyword
  • --code-stringSyntax: string

Typography

Inter · Unbounded · JetBrains Mono

Inter stays Steply's working face. Unbounded is reserved for short display lines: the name, section titles, the contact line. JetBrains Mono appears only where the content is code, a date range, a ref or a flag key.

  • Display--text-display
    Unbounded 700
    Whenes Oliveira
  • Section--text-display-sm
    Unbounded 600
    Career log
  • Title--text-lg
    Inter 600
    Customer portal modernization
  • Body--text-md
    Inter 400 / 1.6
    Implemented and maintained feature-flag-based migration flows, allowing new implementations to be validated before completely switching users to the new backend.
  • UI--text-sm
    Inter 500
    Software Consultant at SUPERO
  • Data--font-mono
    JetBrains Mono 400
    2023-09 → 2026-08 · portal.users.modern-backend

Spacing & radius

4px scale

Tight inside a group, generous between groups. Sections open with --space-16 above and --space-6 under the heading rule.

  • --space-14
  • --space-28
  • --space-312
  • --space-416
  • --space-624
  • --space-832
  • --space-1248
  • --space-1664
  • --radius-sm
  • --radius-md
  • --radius-lg
  • --radius-xl
  • --radius-pill

Buttons

.btn + variant

One primary action per view. Links styled as buttons keep <a>; icon-only buttons always carry aria-label.

variants Email me Resume PDF GitHub
icon · sizes
HTML

Badges, refs, tech

.badge · .ref · .tech

Badges state a status. Refs name git pointers in the career log. Tech chips list a stack; they never get color per technology.

.badge Illustrative Current Pending Deprecated Private source v0.1.0
.ref HEAD consulting java-8 → 9
.tech
  • Java
  • Spring Boot
  • NestJS
  • Angular
  • Apache Kafka
HTML

Callouts

.callout + variant

Steply's alert, redrawn with a tinted field and a hairline border instead of a heavy side stripe.

Illustrative example. Flag keys and code on this page show the pattern, not proprietary client code.

Resume PDF not published. Resume buttons stay disabled until assets/whenes-oliveira-resume.pdf exists. The source résumé has a phone number the site leaves out: export a public copy without it.

Delivered. Application running on the target Java version.

Download failed. The release asset was not found. Try the releases page instead.

HTML

Toast

JS: showToast(message)

Confirms a silent action, like copying an email. Any element with data-copy or data-copy-from copies and raises one bottom-right.

Email copied
HTML

Language switch

.lang-switch

One static page per language, linked to each other. The current language carries aria-current="true"; each link names its language with hreflang, lang and an aria-label in that language. Following a link keeps a deep link such as #job-totvs. Scripts read their interface strings from i18n.js by <html lang>.

HTML

Profile header

.profile

The first viewport of the portfolio. Name in Unbounded, role as on the résumé, current position with a live dot, one summary sentence, then the contact actions. Use <h1 class="profile-name"> on the real page.

Whenes Oliveira

Software EngineerFull Stack

  • Tubarão, SC, Brazil
  • Software Consultant at SUPERO

10+ years building, modernizing and maintaining enterprise applications: backend services, REST APIs, web and mobile apps, system integrations, and legacy systems evolved without losing reliability or testability.

HTML

Career log

.gitlog · newest first

Experience as version history. The gray lane is the career line; the blurple lane is the SUPERO consulting branch, with each client placement as a commit on it. data-branch="tip" starts a lane at its node, "start" ends it and draws the curve back to the career line, data-root ends the career line. Details use native <details>, so they work without JavaScript.

  1. SUPERO Software Consultant

    HEADconsulting Nov 2020 → Present

    Software consulting across enterprise projects and clients: backend, frontend, mobile, system integrations, legacy modernization, troubleshooting and maintenance.

  2. TOTVS Software Consultant

    Sep 2023 → Aug 2026

    Enterprise customer portal for employees of TOTVS customers: new features and incremental migration of legacy functionality to modern implementations.

    Show 7 changesHide changes
    • Contributed to the gradual modernization of a system where legacy Java EE, EJB and Node.js applications coexisted with newer Spring Boot and NestJS services.
    • Implemented and maintained feature-flag-based migration flows so new implementations were validated before switching users to the new backend.
    • Built REST APIs and integrations with Fluig, Zendesk and TOTVS Centralized Base.
    • Applied the Adapter Pattern, Dependency Inversion and Dependency Injection to reduce coupling and make automated testing easier.
    • Created custom annotations that encapsulate Swagger configuration in NestJS, keeping controllers clean.
    • Unit tests with JUnit and Jest against a 60% minimum coverage target; configured Kafka message keys where event ordering had to hold.
    • AI-assisted workflow with Spec Kit, Claude and GitHub Copilot: reviewing, validating, correcting and testing generated code.
    • Java
    • Spring Boot
    • Node.js
    • NestJS
    • Angular
    • TypeScript
    • Apache Kafka
    • JUnit
    • Jest
  3. Selbetti Software Consultant

    Jul 2022 → Aug 2023

    Technical support, mobile and embedded application teams: reproduction, debugging and root-cause analysis on complex issues.

    Show 4 changesHide changes
    • Fixed an issue involving the Caixa Econômica Federal bank slip check-digit algorithm by analyzing the full processing flow, finding the incorrect implementation and validating it against the official documentation.
    • Built a native Android app in Kotlin with an end-to-end printer-list flow through a Java and Spring Boot API.
    • Rebuilt a Ricoh printer frontend in HTML, CSS2, legacy JavaScript, jQuery and AJAX when the Angular solution could not run in the printer's environment.
    • Led the technical execution of a Java 8 → Java 9 migration, delivering the application working on the target version.
    • Java
    • Spring Boot
    • Kotlin
    • Android
    • jQuery
    • Angular
  4. Portonave Software Consultant

    Oct 2021 → Jun 2022

    Software for port operations across desktop, web, mobile and integrated systems.

    Show 4 changesHide changes
    • REST APIs in Java and Spring Boot; desktop applications in Eclipse RCP, SWT and Swing.
    • Native Android apps in Java and web interfaces in React.
    • State persistence that let interrupted multi-step processes resume from the exact step where they stopped.
    • Investigated numerical precision and value representation issues in application flows.
    • Java
    • Spring Boot
    • Eclipse RCP
    • Android
    • React
  5. Philips Software Consultant

    Nov 2020 → Oct 2021

    Tasy healthcare management system: new functionality and maintenance of existing modules.

    Show 4 changesHide changes
    • Extensive Oracle PL/SQL: procedures, functions, views, triggers and complex queries, with business rules implemented in the database per the product architecture.
    • Participated in developing a credentialing workflow for hospitals serving Unimed customers.
    • Technical reference for code quality, helping developers apply SRP, Fail Fast, SOLID and duplication removal.
    • Worked across multiple product versions: branches, merge conflicts and pull requests for each applicable version.
    • Java
    • Node.js
    • Angular
    • TypeScript
    • Oracle
    • PL/SQL
  6. PostoAki Software Developer

    Oct 2019 → Jan 2021

    Loyalty platform for gas station networks: discount coupons, point-of-sale integrations, web and mobile apps.

    Show 5 changesHide changes
    • White-label, multitenant application serving different gas station networks.
    • Shell scripts automating per-client customization: texts, links, settings, icons, images and visual identity.
    • Automated preparation, configuration, build and publishing of the Android and iOS apps.
    • UX decisions such as surfacing the discount coupon on app open and easier navigation through long station lists.
    • Trained a junior developer on the team's activities and processes.
    • Java
    • Spring Boot
    • Angular
    • Ionic
    • Shell
  7. Ateky Technical Support

    Jun 2018 → Aug 2018

    Remote support for internet service provider customers, diagnosing slow or unstable connections from network configuration, signal and routes.

  8. SENAI Software Developer

    Mar 2015 → Nov 2015

    Web-based school management system used by SENAI units.

    Show 3 changesHide changes
    • Features in Java Web, Java EE, JSF, JSP, RichFaces and Hibernate; custom reports in SQL and PostgreSQL.
    • Corrected data inconsistencies so school processes were not blocked.
    • JUnit tests for new functionality, updated whenever business rules changed.
    • Java EE
    • JSF
    • RichFaces
    • Hibernate
    • PostgreSQL
    • JUnit
  9. Evoluma Software Developer Intern

    Jul 2013 → Dec 2013

    PHP vehicle tracking application: registration features, reports, PostgreSQL queries and a PDF user manual.

  10. IT Projects Lab, UNISUL Software Development Intern

    Mar 2011 → Dec 2011

    Desktop app for medication inventory and appointment scheduling, delivered to Abrigo dos Velhinhos de Tubarão and, per the supervising professor, still in use about five years later.

    Show 3 changesHide changes
    • Java 6, SWT, GWT, JDBC and MySQL in an MVC structure, with hand-written SQL through JDBC.
    • Singleton-based guard preventing multiple application instances from opening at once.
    • Visual indicators for low medication stock and overdue appointments.
  11. Library Lab, UNISUL IT Support Intern

    root Mar 2010 → Dec 2010

    Support for a computer lab of about 15 workstations: Wi-Fi, IP addressing and driver issues.

HTML

Migration case

.flag-case · role="switch"

A case study the reader operates. Flip the flag and the request path moves from the legacy services to the modern ones, the way the TOTVS portal validated new implementations before switching users. Add data-flag-case; both states' switch label and status line live in the markup (data-flag-state="off|on"), so each language page carries its own copy; the script only toggles them.

Customer portal modernization

TOTVS · via SUPERO · 2023 – 2026

Customer portal client
  • Angular
  • TypeScript
Legacy services flag off
  • Java EE
  • EJB
  • Node.js
Modern services flag on
  • Spring Boot
  • NestJS

Legacy path. Requests go to the Java EE / EJB services users already depend on.

  • Integrations
  • Fluig
  • Zendesk
  • TOTVS Centralized Base
  • Apache Kafka

Flag key and diagram are illustrative; the migration pattern is from the engagement.

HTML

Case card

.case-grid · .case-card

A case study as a definition list: Context, Challenge, Approach and, only when the résumé states one, Outcome. Cards sit in .case-grid; an odd last card spans the row and splits its fields into two columns.

Java 8 to Java 9 migration

Selbetti2022 – 2023

Context
A Java application that had to move from Java 8 to Java 9.
Challenge
Compatibility issues between the versions.
Approach
Led the technical execution of the migration, analyzing the compatibility issues.
Outcome
Application delivered working on the target version.
  • Java 8
  • Java 9
HTML

Repo cards

.repo-card · .repo-card-featured

Shipped work gets the featured card spanning the row; study repositories sit below it. Language dots use GitHub's linguist colors through --lang.

HTML

Skill matrix

<dl class="skill-matrix">

Core skills exactly as grouped on the résumé. No bars, no percentages: the career log is where depth is proven.

Backend
  • Java
  • Spring Boot
  • Java EE
  • Node.js
  • NestJS
  • TypeScript
  • REST APIs
  • JPA
  • Hibernate
  • EJB
Frontend
  • Angular
  • React
  • JavaScript
  • HTML5
  • CSS3
  • Ionic
  • JSF
Engineering
  • Layered Architecture
  • MVC
  • OOP
  • Clean Code
  • SOLID
  • Design Patterns
  • Dependency Injection
Testing
  • JUnit
  • Jest
  • Mocha/Chai
  • Vitest
  • Cypress
  • Playwright
  • Supertest
Databases
  • Oracle
  • PostgreSQL
  • SQL Server
  • SQL
  • PL/SQL
Messaging
  • REST
  • RabbitMQ
  • Apache Kafka
Tools & agile
  • Git
  • GitHub
  • Azure DevOps
  • Jenkins
  • Jira
  • Scrum
  • Kanban
  • XP
AI-assisted
  • Spec Kit
  • Claude
  • GitHub Copilot
HTML

Code block

.code-block · .tok-*

For showing a pattern in the owner's own words. Highlighting is hand-marked with six token classes, so there is no highlighter to load. Mark anything reconstructed as Illustrative.

api-docs.decorator.ts Illustrative
import { applyDecorators, Type } from '@nestjs/common';
import { ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';

// One annotation instead of four stacked Swagger decorators per endpoint.
export function ApiDocs(tag: string, summary: string, response: Type<unknown>) {
  return applyDecorators(
    ApiTags(tag),
    ApiBearerAuth(),
    ApiOperation({ summary }),
    ApiOkResponse({ type: response }),
  );
}

// users.controller.ts
@Get(':id')
@ApiDocs('users', 'Find user by id', UserResponseDto)
findOne(@Param('id') id: string) {
  return this.users.findOne(id);
}

Education

.entry

A plain entry: title, dates or status on the right, detail below. Stated as the résumé states it.

Universidade do Sul de Santa Catarina · UNISUL

Incomplete

Computer Science

HTML

Contact & footer

.contact · .site-footer

The page's close: the one place the accent fills a whole block. All four routes live here: email (written out and copyable, since mailto does nothing without a mail client), LinkedIn, GitHub and the résumé.

HTML