Updated links

This commit is contained in:
2026-02-19 13:30:54 +00:00
parent 9f2be70fd6
commit 5806f7a134
41 changed files with 57 additions and 1970 deletions
+1 -1
View File
@@ -74,7 +74,7 @@ export function CardHeader({ dotColor, title, rightText }: CardHeaderProps) {
textTransform: 'none',
letterSpacing: 'normal',
color: 'var(--text-tertiary)',
fontFamily: "'Geist Mono', monospace",
fontFamily: 'var(--font-geist-mono)',
marginLeft: 'auto',
}
+1 -1
View File
@@ -233,7 +233,7 @@ export function DashboardLayout() {
case 'download': {
// For now, open the CV file or trigger a download
// This can be wired to an actual PDF when available
window.open('/References/CV_v4.md', '_blank')
window.open('/Andrew_Charlwood_CV.pdf', '_blank')
break
}
case 'panel': {
+3 -3
View File
@@ -252,7 +252,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
style={{
width: '100%',
padding: '9px 11px',
fontFamily: "'Geist Mono', 'Fira Code', monospace",
fontFamily: 'var(--font-geist-mono)',
fontSize: 'clamp(13px, 1.2vw, 15px)',
backgroundColor: activeField === 'username' ? 'var(--surface, #FFFFFF)' : 'var(--bg-dashboard, #F0F5F4)',
border: activeField === 'username' ? '1px solid var(--accent, #0D6E6E)' : '1px solid var(--border-light, #E4EDEB)',
@@ -294,7 +294,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
style={{
width: '100%',
padding: '9px 11px',
fontFamily: "'Geist Mono', 'Fira Code', monospace",
fontFamily: 'var(--font-geist-mono)',
fontSize: 'clamp(13px, 1.2vw, 15px)',
backgroundColor: activeField === 'password' ? 'var(--surface, #FFFFFF)' : 'var(--bg-dashboard, #F0F5F4)',
border: activeField === 'password' ? '1px solid var(--accent, #0D6E6E)' : '1px solid var(--border-light, #E4EDEB)',
@@ -370,7 +370,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
/>
<span
style={{
fontFamily: "var(--font-geist-mono, 'Geist Mono', monospace)",
fontFamily: 'var(--font-geist-mono)',
fontSize: '12px',
color: connectionState === 'connected' ? 'var(--success, #059669)' : 'var(--alert, #DC2626)',
transition: prefersReducedMotion ? 'none' : 'color 300ms ease',
+5 -5
View File
@@ -115,7 +115,7 @@ export function MobileOverviewHeader({ onSearchClick }: MobileOverviewHeaderProp
<div style={{ fontSize: '15px', fontWeight: 700, color: 'var(--text-primary)' }}>
CHARLWOOD, Andrew
</div>
<div style={{ fontSize: '12px', fontFamily: 'Geist Mono, monospace', color: 'var(--text-secondary)' }}>
<div style={{ fontSize: '12px', fontFamily: 'var(--font-geist-mono)', color: 'var(--text-secondary)' }}>
{sidebarCopy.roleTitle}
</div>
</div>
@@ -130,7 +130,7 @@ export function MobileOverviewHeader({ onSearchClick }: MobileOverviewHeaderProp
].map(({ label, value, mono }) => (
<div key={label} style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', fontSize: '13px', padding: '2px 0' }}>
<span style={{ color: 'var(--text-tertiary)' }}>{label}</span>
<span style={{ color: 'var(--text-primary)', fontWeight: 500, textAlign: 'right', fontFamily: mono ? 'Geist Mono, monospace' : undefined, fontSize: mono ? '12px' : undefined, letterSpacing: mono ? '0.12em' : undefined }}>
<span style={{ color: 'var(--text-primary)', fontWeight: 500, textAlign: 'right', fontFamily: mono ? 'var(--font-geist-mono)' : undefined, fontSize: mono ? '12px' : undefined, letterSpacing: mono ? '0.12em' : undefined }}>
{value}
</span>
</div>
@@ -167,7 +167,7 @@ export function MobileOverviewHeader({ onSearchClick }: MobileOverviewHeaderProp
<div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>
{/* Download CV — full width */}
<a
href="/References/CV_v4.md"
href="/Andrew_Charlwood_CV.pdf"
target="_blank"
rel="noopener noreferrer"
aria-label="Download CV"
@@ -214,7 +214,7 @@ export function MobileOverviewHeader({ onSearchClick }: MobileOverviewHeaderProp
<Send size={16} />
</button>
<a
href="https://linkedin.com/in/andycharlwood"
href="https://www.linkedin.com/in/andrewcharlwood/"
target="_blank"
rel="noopener noreferrer"
aria-label="LinkedIn profile"
@@ -233,7 +233,7 @@ export function MobileOverviewHeader({ onSearchClick }: MobileOverviewHeaderProp
<Linkedin size={16} />
</a>
<a
href="https://github.com/andycharlwood"
href="https://github.com/andrewcharlwood"
target="_blank"
rel="noopener noreferrer"
aria-label="GitHub profile"
+2 -2
View File
@@ -77,7 +77,7 @@ export function PhoneCaptcha({ phone }: PhoneCaptchaProps) {
style={{
fontSize: '11px',
color: error ? 'var(--alert, #e53935)' : 'var(--text-tertiary)',
fontFamily: 'Geist Mono, monospace',
fontFamily: 'var(--font-geist-mono)',
transition: 'color 150ms',
}}
>
@@ -99,7 +99,7 @@ export function PhoneCaptcha({ phone }: PhoneCaptchaProps) {
width: '36px',
padding: '3px 4px',
fontSize: '12px',
fontFamily: 'Geist Mono, monospace',
fontFamily: 'var(--font-geist-mono)',
border: `1px solid ${error ? 'var(--alert, #e53935)' : 'var(--border)'}`,
borderRadius: '4px',
background: 'var(--surface)',
@@ -100,7 +100,7 @@ function SkillRow({ skill, yearsSuffix, onClick, onHighlight, isDimmedByFocus =
style={{
fontSize: '12px',
color: 'var(--text-tertiary)',
fontFamily: '"Geist Mono", monospace',
fontFamily: 'var(--font-geist-mono)',
}}
>
{skill.frequency} · {skill.yearsOfExperience} {yearsSuffix}
@@ -182,7 +182,7 @@ function CategorySection({
style={{
fontSize: '11px',
color: 'var(--text-tertiary)',
fontFamily: '"Geist Mono", monospace',
fontFamily: 'var(--font-geist-mono)',
whiteSpace: 'nowrap',
}}
>
+5 -5
View File
@@ -310,7 +310,7 @@ export default function Sidebar({ activeSection, onNavigate, onSearchClick }: Si
<div
style={{
fontSize: '13px',
fontFamily: 'Geist Mono, monospace',
fontFamily: 'var(--font-geist-mono)',
fontWeight: 400,
color: 'var(--text-secondary)',
marginTop: '2px',
@@ -341,7 +341,7 @@ export default function Sidebar({ activeSection, onNavigate, onSearchClick }: Si
style={{
color: 'var(--text-primary)',
fontWeight: 500,
fontFamily: 'Geist Mono, monospace',
fontFamily: 'var(--font-geist-mono)',
fontSize: '12px',
letterSpacing: '0.12em',
}}
@@ -434,7 +434,7 @@ export default function Sidebar({ activeSection, onNavigate, onSearchClick }: Si
</div>
</div>
<a
href="/References/CV_v4.md"
href="/Andrew_Charlwood_CV.pdf"
target="_blank"
rel="noopener noreferrer"
style={{
@@ -543,7 +543,7 @@ export default function Sidebar({ activeSection, onNavigate, onSearchClick }: Si
</button>
<div style={{ display: 'flex', gap: '6px' }}>
<a
href="https://linkedin.com/in/andycharlwood"
href="https://www.linkedin.com/in/andrewcharlwood/"
target="_blank"
rel="noopener noreferrer"
className="sidebar-control"
@@ -568,7 +568,7 @@ export default function Sidebar({ activeSection, onNavigate, onSearchClick }: Si
LinkedIn
</a>
<a
href="https://github.com/andycharlwood"
href="https://github.com/andrewcharlwood"
target="_blank"
rel="noopener noreferrer"
className="sidebar-control"
+2 -2
View File
@@ -91,7 +91,7 @@ export function SkillsAllDetail({ category }: SkillsAllDetailProps) {
style={{
fontSize: '10px',
color: 'var(--text-tertiary)',
fontFamily: '"Geist Mono", monospace',
fontFamily: 'var(--font-geist-mono)',
whiteSpace: 'nowrap',
}}
>
@@ -193,7 +193,7 @@ function SkillRow({ skill, yearsSuffix, onClick }: SkillRowProps) {
style={{
fontSize: '10.5px',
color: 'var(--text-tertiary)',
fontFamily: '"Geist Mono", monospace',
fontFamily: 'var(--font-geist-mono)',
}}
>
{skill.frequency} · {skill.yearsOfExperience} {yearsSuffix}
+1 -1
View File
@@ -9,7 +9,7 @@ export const patient: Patient = {
address: 'Norwich, UK',
phone: '07795553088',
email: 'andy@charlwood.xyz',
linkedin: 'linkedin.com/in/andycharlwood',
linkedin: 'linkedin.com/in/andrewcharlwood',
status: 'Active',
badge: 'Open to opportunities',
qualification: 'MPharm (Hons) 2:1',
+2 -2
View File
@@ -120,14 +120,14 @@ export const profileContent: DeepReadonly<ProfileContent> = {
subtitle: 'Professional profile',
keywords: 'view linkedin professional profile social networking',
type: 'link',
url: 'https://linkedin.com/in/andycharlwood',
url: 'https://www.linkedin.com/in/andrewcharlwood/',
},
{
title: 'View Projects',
subtitle: 'GitHub & portfolio',
keywords: 'view projects github portfolio code repositories open source',
type: 'link',
url: 'https://github.com/andycharlwood',
url: 'https://github.com/andrewcharlwood',
},
],
},
+31 -3
View File
@@ -66,6 +66,34 @@
font-display: swap;
}
/* Monospace — Interval Mono */
@font-face {
font-family: 'Interval Mono';
src: url('/Fonts/IntervalMono/WOFF/TBJInterval-Light.woff2') format('woff2'),
url('/Fonts/IntervalMono/WOFF/TBJInterval-Light.woff') format('woff');
font-weight: 300;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Interval Mono';
src: url('/Fonts/IntervalMono/WOFF/TBJInterval-Regular.woff2') format('woff2'),
url('/Fonts/IntervalMono/WOFF/TBJInterval-Regular.woff') format('woff');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Interval Mono';
src: url('/Fonts/IntervalMono/WOFF/TBJInterval-Bold.woff2') format('woff2'),
url('/Fonts/IntervalMono/WOFF/TBJInterval-Bold.woff') format('woff');
font-weight: 700;
font-style: normal;
font-display: swap;
}
/* Premium UI fonts — Blumir (alternative) */
@font-face {
font-family: 'Blumir';
@@ -89,8 +117,8 @@
--muted: #94A3B8;
--card-bg: #FFFFFF;
--radius: 16px;
--font-primary: 'Plus Jakarta Sans', system-ui, sans-serif;
--font-secondary: 'Inter Tight', system-ui, sans-serif;
--font-primary: 'Elvaro Grotesque', system-ui, sans-serif;
--font-secondary: 'Blumir', system-ui, sans-serif;
/* Typography — Elvaro Grotesque primary, Blumir alternative */
--font-ui: 'Elvaro Grotesque', system-ui, sans-serif;
@@ -131,7 +159,7 @@
--shadow-md: 0 2px 8px rgba(26,43,42,0.08);
--shadow-lg: 0 8px 32px rgba(26,43,42,0.12);
--font-body: var(--font-ui);
--font-mono-dashboard: 'Geist Mono', 'Fira Code', monospace;
--font-mono-dashboard: 'Interval Mono', 'Fira Code', monospace;
/* Detail panel */
--panel-narrow: 400px;