Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ The layout should read like a technical dossier:
3. **Capability map:** stack grouped by language, backend, architecture, cloud, data, and frontend.
4. **Experience trace:** chronological production history with the current role visually elevated.
5. **Workbench:** curated featured projects before dynamic repository tail.
6. **Repository tail and footer:** more proof, socials, and shell/easter-egg affordances.
6. **Repository tail and footer:** more proof and socials, without exposing the shell trigger.

Spacing should be generous enough to feel calm, but dense enough to preserve a systems-console rhythm. Prefer grids, ledgers, and cards over large decorative illustrations.

Expand Down Expand Up @@ -231,11 +231,11 @@ Tags are metadata, not decoration. Use them to make stack and domain fit scannab

### Terminal / shell

The shell is a progressive enhancement and personality layer. It must not be the only way to access resume, contact, stack, or availability information. Keyboard behavior should be predictable: `Enter` submits, `Escape` closes, and focus is visible.
The shell is a progressive enhancement and personality layer. It is an easter egg, not a visible feature: do not add an "open shell" button, footer instruction, or explicit activation hint in the primary UI. It must not be the only way to access resume, contact, stack, or availability information. Keyboard behavior should be predictable after discovery: `Enter` submits, `Escape` closes, and focus is visible.

### CTAs

Primary CTA: resume/contact/hire path. Secondary CTA: GitHub, LinkedIn, project links, or open shell. CTAs should use clear verbs and preserve native link behavior.
Primary CTA: resume/contact/hire path. Secondary CTA: GitHub, LinkedIn, and project links. Do not expose the shell as a CTA. CTAs should use clear verbs and preserve native link behavior.

## Do's and Don'ts

Expand Down
4 changes: 2 additions & 2 deletions PRODUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ Supporting signals:
### Curious developer path

1. Notice the console/runbook aesthetic.
2. Open the interactive shell or find the easter egg.
2. Discover the interactive shell only through the easter egg.
3. Explore repositories and social links.

## Functional Requirements
Expand All @@ -90,7 +90,7 @@ Supporting signals:
- Build-time GitHub project fetching where configured, with safe fallbacks.
- Resume route and/or resume CTA available from primary navigation.
- Contact/social links available in hero/footer and keyboard/screen-reader accessible.
- Hidden shell/easter egg preserved as progressive enhancement; core content must remain useful without it.
- Hidden shell/easter egg preserved as progressive enhancement; it must not have a visible CTA or explicit activation instructions in the primary UI, and core content must remain useful without it.
- Analytics events may track outbound/social/resume interactions, but must not block navigation.

## Non-Goals
Expand Down
9 changes: 1 addition & 8 deletions src/components/Portfolio.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -247,12 +247,6 @@ export default function Portfolio({ projects }: { projects: GitHubRepo[] }) {
[closeTerminal, cmdHist, histIdx, submit],
);

const openTerminal = () => {
lastFocusedRef.current = document.activeElement as HTMLElement | null;
setTermOpen(true);
trackEvent("terminal_open", { source: "hero" });
};

return (
<>
<div className="scroll-bar fixed top-0 left-0 right-0 h-[2px] z-50" style={{ transform: `scaleX(${scrollProgress})` }} />
Expand Down Expand Up @@ -285,7 +279,6 @@ export default function Portfolio({ projects }: { projects: GitHubRepo[] }) {
<div className="hero-actions">
<a href="/resume" className="primary-action" onClick={() => trackEvent("cta_click", { label: "hero_resume" })}>View resume</a>
<a href="https://www.linkedin.com/in/jonathan-peris/" target="_blank" rel="noreferrer noopener" className="secondary-action" onClick={() => trackEvent("cta_click", { label: "hero_linkedin" })}>Contact on LinkedIn</a>
<button type="button" className="ghost-action" onClick={openTerminal}>Open shell</button>
</div>
<div className="signal-strip" aria-label="Operating signals">
{OPERATING_SIGNALS.map((signal) => (
Expand Down Expand Up @@ -433,7 +426,7 @@ export default function Portfolio({ projects }: { projects: GitHubRepo[] }) {
<div className="footer-socials">
{SOCIALS.map((social) => <SocialLink key={social.label} social={social} compact />)}
</div>
<p>Built as a small systems manual. Hidden shell: ↑↑↓↓←→←→BA</p>
<p>Built as a small systems manual.</p>
</footer>
</div>

Expand Down