Last audited: 2026-05-17T00:17:09Z
The redesign should feel like the same site, only sharper. Preserve the dark technical operator aesthetic, but make every console metaphor earn its place by improving clarity, proof, or conversion.
The current visual language is strong enough to keep:
- dark green-black background,
- subtle grid/noise overlays,
- terminal/YAML/system-status language,
- route-like navigation,
- monospace metadata,
- neon green accent system,
- restrained cards and borders,
- hidden shell/easter egg.
The overhaul should not introduce a generic SaaS/agency visual system. It should turn the existing “small systems manual” direction into a premium, legible, proof-led portfolio.
- Memorable hero: large
Jonathan Periswordmark-like heading creates a strong first impression. - Distinct aesthetic: backend-console mood fits Jonathan’s .NET/Azure/backend architecture positioning.
- Clear availability:
Open to remote roles + consultingappears immediately. - Strong technical signals: .NET, Azure, production systems, architecture, delivery discipline.
- Good base interaction model: route nav, resume CTA, LinkedIn CTA, social links, hidden terminal.
- Avoids common portfolio clichés: no stock illustrations, generic gradient hero, or empty “passionate developer” language.
- Hero copy can be more outcome-specific.
- Current YAML card is attractive but partially redundant.
View resumeis visually primary whilecontactis secondary; this may not match consulting goals.- Stylized labels can obscure meaning for non-engineer visitors.
- Some sections are sparse relative to the page length.
- Card modules risk becoming repetitive if every section has the same rhythm.
- Workbench/repository sections need stronger proof framing.
- Very dim labels and small monospace text may reduce readability.
Use these as design filters:
- Senior, not flashy.
- Technical, not cryptic.
- Calm under production pressure.
- Pragmatic architecture over architecture theater.
- Dark, precise, operational, slightly playful.
- Brazilian remote-first engineer comfortable with US teams.
- Reliable systems manual, not startup landing page.
Use terminal/YAML/repo metaphors only where they help visitors parse content.
Good uses:
- hero operating profile,
- capability maps,
- experience logs,
- case files,
- contact packet,
- hidden shell.
Risky uses:
- decorative fake code with no new information,
- obscure labels without plain-English support,
- too many
status: healthycards saying the same thing.
The hero can carry atmosphere. The rest of the page must carry evidence:
- outcomes,
- domains,
- stacks,
- shipped artifacts,
- project purpose,
- production constraints,
- repository links.
Keep technical labels, but pair them with plain-English intent.
Examples:
TRACE 01 — Profile packet / how I work
TRACE 02 — Capability map / what I help with
TRACE 03 — Experience trace / selected roles
TRACE 04 — Workbench / public proof
TRACE 05 — Contact packet / open channel
The site can ask for action directly without breaking the aesthetic.
Use:
Start conversation,Contact on LinkedIn,Email Jonathan,View resume.pdf,Open GitHub.
Avoid over-cute CTAs where clarity matters. run contact.sh can be a flourish, but the accessible label should be clear.
Recommended page order:
- Hero / operating profile.
- Profile packet / how Jonathan works.
- Capability map / what Jonathan helps with.
- Experience trace / selected roles and domains.
- Workbench / public proof and case files.
- Repository tail / curated artifacts.
- Contact packet / final CTA.
- Footer / social links / hidden shell clue.
Left:
- availability pill,
- huge name,
- role line,
- one-sentence lede,
- resume/contact buttons,
- operating signal strip.
Right:
- YAML deploy ledger card.
This layout should remain, but the copy hierarchy should change.
┌────────────────────────────────────────────────────────────────────┐
│ jp. /profile /trace /workbench CTA │
├────────────────────────────────────────────────────────────────────┤
│ [available: remote roles + select consulting] │
│ │
│ Jonathan Peris ┌─ operating-profile.yaml │
│ Backend architecture for │ status: available │
│ production .NET systems. │ best_for: │
│ │ - .NET modernization │
│ I help teams clarify boundaries, │ - Azure delivery │
│ ship safer releases, and keep │ - reliability work │
│ critical systems operable after launch. │ signals: │
│ │ - 12+ yrs production │
│ [Start conversation] [View resume.pdf] │ - remote BR -> US │
│ └─────────────────────────│
│ [12+ yrs] [.NET/Azure] [Remote] [Architecture + delivery] │
└────────────────────────────────────────────────────────────────────┘
Primary button: View resume
Secondary button: Contact on LinkedIn
Best for recruiter traffic.
Primary button: Start conversation
Secondary button: View resume.pdf
Best for consulting and high-intent referrals.
Primary button group:
Hiring? View resumeNeed architecture help? Contact
Best when audience is mixed and traffic is not yet segmented.
Current tokens already use OKLCH and should remain broadly intact.
- Background: near-black green.
- Surface: dark green-grey.
- Border: muted green-grey.
- Text: off-white/green-white.
- Accent: neon green.
- Support accents: cyan, purple, amber, rose.
- Increase contrast for muted body copy and tiny labels.
- Reserve brightest green for primary actions and active status.
- Use support accents by content type, not randomly:
- green: primary CTA / availability / status,
- cyan: cloud/platform/delivery,
- purple: architecture/modeling,
- amber: experience/timeline,
- rose: warnings, constraints, incident/reliability notes.
--intent-primary: var(--color-green);
--intent-platform: var(--color-cyan);
--intent-architecture: var(--color-purple);
--intent-delivery: var(--color-amber);
--intent-risk: var(--color-rose);- DM Sans for readable body/display text.
- JetBrains Mono/Fira Code for metadata, tags, route labels, YAML, and shell affordances.
- Increase paragraph line-height where text is long.
- Avoid making important content too dim or too small.
- Use monospace as accent, not as the default reading mode.
- H1: extremely large, but responsive with controlled wrapping.
- Section H2: large enough to reset attention after hero.
- Card H3: clear, plain-language titles.
- Metadata: small but contrast-safe.
Some vertical gaps feel atmospheric but can read as unfinished. The page has enough total content, but rhythm should be tightened so each scroll reveals meaningful proof.
- Hero: spacious, cinematic.
- Profile: medium density, editorial.
- Capability: denser grid; easy to scan.
- Experience: timeline/log rhythm.
- Workbench: larger case-file cards with varied spans.
- Repository tail: compact list/table.
- Contact packet: strong final block.
Purpose: immediate status.
Content examples:
available: remote roles + select consulting
operator status: available
remote-first / Brazil -> US teams
Design:
- Green dot plus text.
- High enough contrast to read quickly.
- Should not be the only place availability appears.
Replace or evolve deploy-ledger.yaml.
Recommended content:
operator: Jonathan Peris
mode: senior backend / consulting
best_for:
- production .NET systems
- Azure delivery discipline
- architecture recovery
- reliability after launch
signals:
- 12+ years production software
- finance / automotive / education
- remote Brazil to US teamsDesign:
- Keep code-block/YAML style.
- Use syntax-style color accents sparingly.
- Add line-height for readability.
- Avoid duplicating hero signals verbatim.
Current signals are useful. Keep but refine.
Recommended copy:
12+ yrs/shipping production software.NET + Azure/primary backend laneRemote/Brazil -> US teamsSystems/architecture + delivery ownership
Current TRACE NN works. Add hybrid naming.
Design:
TRACE 02
Capability map / what I help with
Use metadata label plus plain-language subtitle where useful.
Add below profile paragraphs.
Layout:
[boundaries] [tests + CI/CD] [production ownership] [remote teams]
or compact rows:
01 define boundaries that reduce operational cost
02 ship with tests and delivery feedback loops
03 document systems so the next engineer can operate them
04 keep architecture pragmatic under production constraints
Move from pure skill list to problem-oriented cards.
Card schema:
/path/backend-architecture
title: Architecture recovery
helps_with: unclear ownership, service boundaries, modularization
stack: CQRS, DDD, clean architecture, .NET APIs
Recommended schema:
00 Jul 2023 — Present
Software Engineer @ Derivative Path
Domain: financial platforms
Stack: .NET 8, SQL Server, CQRS, Azure DevOps
Impact: backend modules for accounting/fiscal workflows; maintainable delivery in production platform
Design:
- Keep timeline/log feel.
- Make company/role clear.
- Add domain chips if possible.
- Avoid long paragraphs without scan anchors.
Current project cards should become proof-first cards.
Schema:
CASE 01 / runtime lab
Speedy Bird
signal: cross-platform native UI experiment
proof: Lynx + TypeScript + CI/CD + browser deploy
actions: Source / Live
Use signal, proof, stack, and actions consistently.
Design as a compact repo index.
Schema:
repo: blazor-mudblazor-starter
summary: Blazor + MudBlazor starter template
signal: reusable frontend/backend starter
stack: C# / Blazor
links: source / site
Consider showing fewer repos with better labels rather than more raw rows.
Add a strong final CTA before footer.
Wireframe:
/contact_packet.yaml
status: available for remote roles + select consulting
best_fit:
- backend architecture
- .NET/Azure modernization
- delivery/reliability cleanup
channels:
- LinkedIn
- email
artifact: resume.pdf
[Start conversation] [View resume] [Open GitHub]
- Keep sticky/nav route styling.
- Add visible contact action or make
resume.pdfless monopolizing depending on CTA experiment. - Active section indication would improve orientation on long page.
Hidden shell
Keep as an easter egg. It reinforces the brand and adds personality.
Requirements:
- Must not block normal keyboard navigation.
- Must have accessible dialog labeling.
- Should respect reduced motion if animated.
- Analytics event
shell_opencan measure whether it is discovered.
Project cards should clearly separate:
- Source,
- Live/demo,
- Docs if available.
Use descriptive labels for accessibility, not only “Source” repeated without context.
Test breakpoints:
- 390px mobile,
- 768px tablet,
- 1024px small laptop,
- 1440px desktop.
- Nav/logo/compact CTA.
- Availability pill.
- Name.
- Value proposition.
- Primary/secondary CTA.
- Signal strip.
- Operating profile card.
- Profile/capability/proof.
- H1 must not cause awkward overflow.
- YAML card should wrap cleanly or become a compact card.
- Nav links may need horizontal scroll, menu, or reduced labels.
- CTA buttons should stack with clear tap targets.
- Cards should not rely on hover-only affordances.
- Maintain semantic headings in page order.
- Ensure
aria-labels on icon-only links. - Ensure focus-visible states on all links/buttons.
- Keep touch targets at least 44px where practical.
- Avoid low-contrast dim metadata for important text.
- Do not rely solely on green to communicate state.
- Honor
prefers-reduced-motionfor reveal and cursor effects. - Terminal dialog should trap or cycle focus appropriately and close with Escape.
- Repeated “Source” and “Live” links should include context via accessible labels.
Start lightweight:
- Derive variant from query param, e.g.
?variant=contact-first. - Store in
localStoragefor repeat consistency. - Include variant in every
trackEventpayload. - Keep default as current or safest variant.
Possible variants:
const VARIANTS = {
cta: "resume-first" | "contact-first" | "split-intent",
heroCopy: "stack" | "production-dotnet" | "legible-traffic",
card: "bio-ledger" | "best-for" | "case-status",
labels: "stylized" | "hybrid",
workbench: "project-grid" | "case-files" | "repo-tree",
};Control:
[View resume] [Contact on LinkedIn]
Variant:
[Start conversation] [View resume.pdf]
Success metric:
- Contact click rate.
- Resume click rate.
- Total CTA click rate.
Control:
Backend architecture / .NET / Azure
Variant 1:
Backend architecture for production .NET systems
Variant 2:
Backend systems that stay legible under real traffic
Success metric:
- First-viewport CTA clicks.
- Bounce rate.
- Scroll to profile/capability sections.
Control:
operator/location/status/focus/runtimeVariant:
mode/best_for/signalsSuccess metric:
- Hero CTA clicks.
- Scroll depth to Workbench.
- Time on page.
Control:
Profile packet
Capability map
Experience trace
Workbench
Variant:
Profile packet / how I work
Capability map / what I help with
Experience trace / selected roles
Workbench / public proof
Success metric:
- Scroll depth by section.
- Nav click rate.
- Reduced bounce from non-GitHub referrers.
Control:
- Current project card grid.
Variant:
- Case-file cards with
signal,proof, and explicit action labels.
Success metric:
- Project source/live click-through.
- Scroll depth past Workbench.
- Contact clicks after Workbench.
Control:
- Footer with social icons only.
Variant:
- Full-width terminal/YAML contact card above footer.
Success metric:
- Footer/contact click-through.
- Resume clicks after scroll >75%.
Backend architecture for production .NET systems.
I help teams clarify boundaries, ship safer releases, and keep critical systems operable after launch.
.NET / Azure systems that stay legible under real traffic.
Architecture recovery
For teams with unclear service ownership, tangled domains, or fragile modernization paths.
Delivery discipline
CI/CD, tests, release loops, and documentation that keep architecture honest after launch.
Production backend systems
C#, .NET, SQL Server, PostgreSQL, Azure, Docker, and APIs designed for ownership.
Remote technical leadership
Brazil-to-US collaboration, async clarity, and engineering decisions written down.
If your backend needs clearer boundaries, safer delivery, or calmer production ownership:
[Start conversation] [View resume.pdf]
Before merging an overhaul:
- Run typecheck/build with Bun in this repo.
- Inspect desktop, tablet, and mobile in browser.
- Verify no horizontal overflow at 390px.
- Verify resume route and external social/project links.
- Verify analytics events still fire and include variant labels.
- Verify hidden shell still opens/closes and returns focus.
- Verify reduced motion behavior.
- Confirm Lighthouse/accessibility issues are not introduced.
The redesign succeeds if:
- The site still feels unmistakably like a dark systems-console portfolio.
- A recruiter can understand Jonathan’s role and download the resume quickly.
- A consulting lead can understand what backend problems Jonathan helps solve.
- Workbench cards communicate proof, not only project names.
- The page ends with an intentional contact path.
- A/B variants can be tested without duplicating the whole page.