--- export const prerender = true; import Layout from '../../layouts/PageLayout.astro'; import { getTranslation } from '../../i18n/translations'; import ContributionCalendar from '../../components/ContributionCalendar.jsx'; import LatestCommits from '../../components/LatestCommits.jsx'; const metadata = { title: 'Development Activity & Code Contributions | 365DevNet Ecosystem', description: 'See the latest code contributions, development activity, and project updates for the 365DevNet ecosystem.' }; const lang = Astro.params.lang || 'en'; const t = getTranslation(lang); // Fetch Gitea user heatmap at build time (cached) async function getUserHeatmap(username) { const url = `https://git.365devnet.eu/api/v1/users/${username}/heatmap`; let heatmap: Array<{ timestamp: number; contributions: number }> = []; try { const headers = { accept: 'application/json' }; if (import.meta.env.GITEA_TOKEN) { headers['Authorization'] = `token ${import.meta.env.GITEA_TOKEN}`; } const response = await fetch(url, { headers }); if (response.ok) { heatmap = await response.json(); } } catch (error) { console.error('Error fetching user heatmap:', error); } // Aggregate by date const contributions: Record = {}; for (const entry of heatmap) { const date = new Date(entry.timestamp * 1000).toISOString().slice(0, 10); contributions[date] = (contributions[date] || 0) + entry.contributions; } return contributions; } const contributionData = await getUserHeatmap('Richard'); export async function getStaticPaths() { return [ { params: { lang: 'en' } }, { params: { lang: 'nl' } }, { params: { lang: 'de' } }, { params: { lang: 'fr' } }, ]; } // Calculate some stats from contribution data const totalContributions = Object.values(contributionData).reduce((sum: number, count: number) => sum + count, 0); const contributionDays = Object.keys(contributionData).length; const averagePerDay = contributionDays > 0 ? (totalContributions / contributionDays).toFixed(1) : 0; ---
👨‍💻

{t.development.pageTitle || 'Development Progress'}

Live development activity and code contributions from the 365DevNet ecosystem

📈

Total Contributions

{totalContributions}

This year

🗓️

Active Days

{contributionDays}

Days with commits

Daily Average

{averagePerDay}

Commits per active day

📊

Contribution Activity

Development activity over time