diff --git a/app/page.tsx b/app/page.tsx index 7eeee56..91cacdb 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -67,11 +67,22 @@ const Icons = { export default function LandingPage() { const [username, setUsername] = useState(''); + const [error, setError] = useState(''); const [copied, setCopied] = useState(false); + const cleanUsername = (value: string) => { + return value + .trim() + .replace(/^https?:\/\/(www\.)?github\.com\//i, '') + .replace(/\/$/, '') + .replace(/\s/g, ''); +}; + +const isValidUsername = (value: string) => { + return /^(?!-)(?!.*--)[A-Za-z0-9-]{1,39}(?(null); const trimmedUsername = username.trim(); - const hasUsername = trimmedUsername.length > 0; - + const hasUsername = trimmedUsername.length > 0 && error === ''; const badgeUrl = `/api/streak?user=${trimmedUsername}`; const markdown = `![CommitPulse](https://commitpulse.vercel.app/api/streak?user=${trimmedUsername})`; @@ -118,6 +129,38 @@ export default function LandingPage() {
+<<<<<<< HEAD +
+
+ { + const raw = e.target.value; + const cleaned = cleanUsername(raw); + + setUsername(cleaned); + + if (cleaned && !isValidUsername(cleaned)) { + setError('Invalid GitHub username format'); + } else { + setError(''); + } + }} + /> +
+ + {error && ( +

+ Invalid GitHub username format +

+ )} +
+ +
+=======
) : null}
+>>>>>>> 42231861dfb8eb62e766887e5419365e7e1082ab