From 74421848f4895a311868639c13a8ec6a87f0218a Mon Sep 17 00:00:00 2001 From: AltanEsmer Date: Thu, 7 May 2026 16:53:07 +0200 Subject: [PATCH] feat: /hire page, Cyprus -> Denmark, drop twitter/linkedin, fix contact reveal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ContactSection: section was invisible because `.reveal` elements never got the `.in` class — added an IntersectionObserver matching AboutSection's pattern. Also fixed the typo'd email (altan.esmer -> esmeraltan). - Nav: hire-me CTA now points to new /hire page instead of #contact. - New /hire page (static) with availability list, mailto CTA, link to contact form, back link. - Footer: removed twitter and linkedin entries (no accounts); added direct email link instead. - AboutSection: 'SDU · Cyprus' -> 'SDU · Denmark', and code-bio `based: 'Cyprus / EU'` -> 'Denmark / EU'. - HeroSection: terminal `"Cyprus / EU"` and 'based in Cyprus' both switched to Denmark. Co-Authored-By: Claude Opus 4.7 --- src/app/hire/page.tsx | 159 ++++++++++++++++++++++++++++++ src/components/AboutSection.tsx | 4 +- src/components/ContactSection.tsx | 28 +++++- src/components/Footer.tsx | 6 +- src/components/HeroSection.tsx | 4 +- src/components/Nav.tsx | 2 +- 6 files changed, 190 insertions(+), 13 deletions(-) create mode 100644 src/app/hire/page.tsx diff --git a/src/app/hire/page.tsx b/src/app/hire/page.tsx new file mode 100644 index 0000000..0c48272 --- /dev/null +++ b/src/app/hire/page.tsx @@ -0,0 +1,159 @@ +import Link from 'next/link'; + +export const metadata = { + title: 'Hire me — Altan Esmer', + description: + 'Open to full-time, contract, and freelance software engineering work.', +}; + +const openTo = [ + 'Full-time roles', + 'Contract engagements', + 'Freelance projects', + 'Technical consulting', +]; + +export default function HirePage() { + return ( +
+
+
+ 06 // + ./hire-me + +
+ +

+ Let's work +
+ together. +

+ +

+ I'm a full-stack engineer focused on developer tooling and + performant web experiences. If you're building something + interesting, I'd love to hear about it. +

+ +
+
+ open to +
+
    + {openTo.map((item) => ( +
  • + + {item} +
  • + ))} +
+ +
+ + $ ./email-altan + + + or use the contact form + +
+
+ + + ← back home + +
+
+ ); +} diff --git a/src/components/AboutSection.tsx b/src/components/AboutSection.tsx index 696433b..3b4e20a 100644 --- a/src/components/AboutSection.tsx +++ b/src/components/AboutSection.tsx @@ -24,7 +24,7 @@ const timelineItems = [ { year: '2018 — 2022', title: 'B.Sc. Computer Science', - meta: 'SDU · Cyprus', + meta: 'SDU · Denmark', body: 'Side-quest: organized student hackathons. Thesis on incremental computation.', }, ] @@ -124,7 +124,7 @@ export default function AboutSection() { {' '} based {': '} - {'\'Cyprus / EU\''} + {'\'Denmark / EU\''} {','}
diff --git a/src/components/ContactSection.tsx b/src/components/ContactSection.tsx index c5f9ba0..b301704 100644 --- a/src/components/ContactSection.tsx +++ b/src/components/ContactSection.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useState, useEffect, FormEvent } from 'react'; +import { useState, useEffect, useRef, FormEvent } from 'react'; interface FormState { name: string; @@ -12,6 +12,8 @@ interface FormState { } export default function ContactSection() { + const sectionRef = useRef(null); + const [form, setForm] = useState({ name: '', email: '', @@ -21,6 +23,21 @@ export default function ContactSection() { errors: {}, }); + useEffect(() => { + const el = sectionRef.current; + if (!el) return; + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) entry.target.classList.add('in'); + }); + }, + { threshold: 0.12 } + ); + el.querySelectorAll('.reveal').forEach((t) => observer.observe(t)); + return () => observer.disconnect(); + }, []); + useEffect(() => { if (!form.submitted) return; const timer = setTimeout(() => { @@ -53,7 +70,7 @@ export default function ContactSection() { .join('\n'); const mailto = - `mailto:altan.esmer@gmail.com` + + `mailto:esmeraltan@gmail.com` + `?subject=${encodeURIComponent('Hi Altan')}` + `&body=${encodeURIComponent(body)}`; @@ -68,7 +85,12 @@ export default function ContactSection() { } return ( -
+