Universidade do Sul de Santa Catarina · UNISUL
IncompleteComputer Science
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
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
Customer portal: legacy Java EE and modern NestJS side by side, switched by feature flags.
Led a Java 8 → 9 migration; rebuilt a printer UI for hardware Angular couldn't run on.
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.
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.
Tight inside a group, generous between groups. Sections open with --space-16 above and --space-6 under the heading rule.
One primary action per view. Links styled as buttons keep <a>; icon-only buttons always carry aria-label.
Badges state a status. Refs name git pointers in the career log. Tech chips list a stack; they never get color per technology.
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.
Confirms a silent action, like copying an email. Any element with data-copy or data-copy-from copies and raises one bottom-right.
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>.
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.
Software EngineerFull Stack
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.
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.
Software consulting across enterprise projects and clients: backend, frontend, mobile, system integrations, legacy modernization, troubleshooting and maintenance.
Enterprise customer portal for employees of TOTVS customers: new features and incremental migration of legacy functionality to modern implementations.
Technical support, mobile and embedded application teams: reproduction, debugging and root-cause analysis on complex issues.
Software for port operations across desktop, web, mobile and integrated systems.
Tasy healthcare management system: new functionality and maintenance of existing modules.
Loyalty platform for gas station networks: discount coupons, point-of-sale integrations, web and mobile apps.
Remote support for internet service provider customers, diagnosing slow or unstable connections from network configuration, signal and routes.
Web-based school management system used by SENAI units.
PHP vehicle tracking application: registration features, reports, PostgreSQL queries and a PDF user manual.
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.
Support for a computer lab of about 15 workstations: Wi-Fi, IP addressing and driver issues.
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.
TOTVS · via SUPERO · 2023 – 2026
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.
Shipped work gets the featured card spanning the row; study repositories sit below it. Language dots use GitHub's linguist colors through --lang.
Placar Basquete, a FIBA electronic basketball scoreboard for Windows. Every vX.Y.Z tag builds in GitHub Actions and publishes the installer to a public releases repository, keeping the five most recent versions.
Hexagonal architecture studies from the Full Cycle course.
Modular monolith architecture exercises from the Full Cycle course.
Domain-Driven Design course exercises from Alura.
Core skills exactly as grouped on the résumé. No bars, no percentages: the career log is where depth is proven.
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.
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);
}
A plain entry: title, dates or status on the right, detail below. Stated as the résumé states it.
Computer Science
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é.