import React from 'react'; import Image from 'next/image'; import { Input } from '@/components/ui/input'; import { Separator } from '@/components/ui/separator'; import { Card, CardContent, CardDescription, CardHeader } from '@/components/ui/card'; import Link from 'next/link'; import { SearchResult } from '@/components/search-result'; import { PublicUser } from '@/lib/github-user'; const calculateAge = (birthdate: Date): number => { const today = new Date(); let age = today.getFullYear() - birthdate.getFullYear(); const monthDiff = today.getMonth() - birthdate.getMonth(); // Adjust age if the birthday hasn't occurred yet this year if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthdate.getDate())) { age--; } return age; }; const getRepos = async (username: string) => { let repos: any[] = []; let page = 1; let hasNextPage = true; while (hasNextPage) { const response = await fetch(`https://api.github.com/users/${username}/repos?page=${page}&per_page=100`, { headers: { Accept: 'application/vnd.github+json', }, }); const data = await response.json(); if (Array.isArray(data)) { repos = repos.concat(data); hasNextPage = data.length === 100; // Check if there are more pages page++; } else { hasNextPage = false; // Stop if the response is not an array (likely an error) } } return repos; }; const getLanguages = async (repo: any) => { const response = await fetch(repo.languages_url, { headers: { Accept: 'application/vnd.github+json', }, }); return await response.json(); }; const accumulateLanguages = async (repos: any[]) => { const languages: { [key: string]: number } = {}; for (const repo of repos) { const repoLanguages = await getLanguages(repo); for (const lang in repoLanguages) { languages[lang] = (languages[lang] || 0) + repoLanguages[lang]; } } return languages; }; export default async function Home() { const profileResponse = await fetch('https://api.github.com/users/markusthielker'); const profile = await profileResponse.json() as PublicUser; const username = 'markusthielker'; const repos = await getRepos(username); const languages = await accumulateLanguages(repos); const totalBytes = Object.values(languages).reduce((sum, bytes) => sum + bytes, 0); const languagePercentages = Object.entries(languages) .map(([lang, bytes]) => ({ lang, percent: (bytes / totalBytes) * 100, })) .sort((a, b) => b.percent - a.percent) .slice(0, 5); const age = calculateAge(new Date('2001-03-04')); return (
{ /* search header */}
Portrait of Markus Thielker { /* header content (centered) */}
{ /* input */} { /* tab navigation */}
All News Images Videos Books Web Finances
{ /* personalised content (centered) */}
{ /* heading */}

Markus Thielker

Software Engineer

{ /* card grid */}
{ /* images */}
Portrait of Markus Thielker
Portrait of Markus Thielker
Portrait of Markus Thielker
{ /* GitHub */}
GitHub GitHub
{profile.name} {profile.followers} Followers
{profile.bio}
{ /* age */} Age 23 Jahre 04. März 2001 { /* employer */} Employer None Open for work { /* TODO */} Employer { languagePercentages &&
    {Object.entries(languagePercentages).map(([lang, percent]) => (
  • {lang}: {percent as unknown as string} %
  • ))}
}
{ /* default content (centered) */}
{ /* search results column */}
{ /* person info column */}
Info Markus Thielker ist ein {age} Jahre alter Software Engineer aus Neu-Ulm, Deutschland. Er entwickelt, nach einiger Jahre Android App Entwicklung, webbasierte Sofwtare. Dabei verwendet er vorranig Next.js und Angular.
Degree: None Experience: 2.5 years Pets: One dog Favorite Tech: Next.js & Kotlin
); }