Commit before this refactoring with partials and stuff gets out of control

This commit is contained in:
2025-09-03 09:41:50 +02:00
parent 7c45c0af08
commit e3ca84a584
11 changed files with 182 additions and 142 deletions

27
.gitignore vendored Normal file
View File

@ -0,0 +1,27 @@
# Binaries
linuxservice
*.exe
*.dll
*.so
*.dylib
# Build directories
/bin/
/build/
/dist/
# Logs and caches
*.log
*.cache
# OS files
.DS_Store
Thumbs.db
# Editor/project files
.vscode/
.idea/
# Go
*.test
coverage.out

Binary file not shown.

48
main.go
View File

@ -9,6 +9,7 @@ import (
"log"
"net/http"
"os"
"path/filepath"
"strings"
"sync"
"time"
@ -102,6 +103,12 @@ func NewServer() *Server {
if err != nil {
log.Fatalf("Failed to parse templates: %v", err)
}
// Optionally parse partials if any exist
if matches, _ := filepath.Glob("templates/partials/*.html"); len(matches) > 0 {
if _, err := templates.ParseFiles(matches...); err != nil {
log.Fatalf("Failed to parse partial templates: %v", err)
}
}
return &Server{
config: config,
@ -109,6 +116,21 @@ func NewServer() *Server {
}
}
// cleanupOldSubmissions periodically purges stale rate-limit entries
func cleanupOldSubmissions() {
for {
time.Sleep(10 * time.Minute)
mu.Lock()
cutoff := time.Now().Add(-submissionCooldown)
for ip, t := range lastSubmissionTime {
if t.Before(cutoff) {
delete(lastSubmissionTime, ip)
}
}
mu.Unlock()
}
}
// createPageData creates PageData with the given title and current page
func (s *Server) createPageData(title, currentPage string) PageData {
return PageData{
@ -208,7 +230,7 @@ func (s *Server) handleContactForm(w http.ResponseWriter, r *http.Request, data
mu.Unlock()
// On success, render success message
data.SuccessMessage = "Bedankt voor uw bericht! We nemen zo snel mogelijk contact met u op."
data.SuccessMessage = "Bedankt voor uw bericht! Ik neem zo snel mogelijk contact met u op."
data.FormData = ContactForm{} // Clear form data
s.renderTemplate(w, "contact.html", *data)
}
@ -238,7 +260,7 @@ func (s *Server) sendToTelegram(form ContactForm) error {
payload := map[string]interface{}{
"chat_id": s.config.TelegramChatID,
"text": message,
"parse_mode": "Markdown",
"parse_mode": "MarkdownV2",
}
jsonData, err := json.Marshal(payload)
@ -362,7 +384,7 @@ func (s *Server) linuxHandler(w http.ResponseWriter, r *http.Request) {
func (s *Server) setupRoutes() {
// Static files
fs := http.FileServer(http.Dir("static/"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
http.Handle("/static/", http.StripPrefix("/static/", cacheControlMiddleware(fs)))
// Page routes
http.HandleFunc("/", s.homeHandler)
@ -376,7 +398,27 @@ func (s *Server) setupRoutes() {
func main() {
server := NewServer()
server.setupRoutes()
// Start background cleanup for rate limiting map
go cleanupOldSubmissions()
log.Printf("Server starting on %s", server.config.Port)
log.Fatal(http.ListenAndServe(server.config.Port, nil))
}
// cacheControlMiddleware sets Cache-Control headers for static assets
func cacheControlMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
switch {
case strings.HasSuffix(path, ".css") || strings.HasSuffix(path, ".js") ||
strings.HasSuffix(path, ".png") || strings.HasSuffix(path, ".jpg") ||
strings.HasSuffix(path, ".jpeg") || strings.HasSuffix(path, ".webp") ||
strings.HasSuffix(path, ".svg") || strings.HasSuffix(path, ".ico") ||
strings.HasSuffix(path, ".woff2"):
w.Header().Set("Cache-Control", "public, max-age=31536000, immutable")
default:
w.Header().Set("Cache-Control", "public, max-age=300")
}
next.ServeHTTP(w, r)
})
}

View File

@ -8,12 +8,12 @@
"theme_color": "#059669",
"icons": [
{
"src": "/static/android-chrome-192x192.png",
"src": "/static/images/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/static/android-chrome-512x512.png",
"src": "/static/images/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}

View File

@ -15,7 +15,7 @@
<!-- Open Graph Meta Tags for Social Media -->
<meta property="og:title" content="{{.Title}}">
<meta property="og:description" content="Neem contact op met {{.CompanyName}} voor Linux-migratieservice. Gratis advies, installatie, datamigratie en ondersteuning in gemeente Het Hogeland.">
<meta property="og:image" content="https://{{.Domain}}/static/TuxAinrom.webp">
<meta property="og:image" content="https://{{.Domain}}/static/images/TuxAinrom.webp">
<meta property="og:image:alt" content="Tux Linux mascotte banner voor Hogeland Linux service">
<meta property="og:url" content="https://{{.Domain}}/contact">
<meta property="og:type" content="website">
@ -26,7 +26,7 @@
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{.Title}}">
<meta name="twitter:description" content="Neem contact op met {{.CompanyName}} voor Linux-migratieservice. Gratis advies en ondersteuning.">
<meta name="twitter:image" content="https://{{.Domain}}/static/TuxAinrom.webp">
<meta name="twitter:image" content="https://{{.Domain}}/static/images/TuxAinrom.webp">
<meta name="twitter:image:alt" content="Tux Linux mascotte banner voor Hogeland Linux service">
<!-- Favicon Links -->
@ -45,6 +45,8 @@
<!-- Preload Critical Resources -->
<link rel="preload" href="/static/css/style.css" as="style">
<link rel="preconnect" href="https://fonts.googleapis.com" crossorigin>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" as="style">
<!-- CSS and Fonts -->
@ -58,7 +60,7 @@
<section class="page-hero">
<div class="container">
<h1>Neem contact op</h1>
<p>Heeft u vragen over Linux migratie? Wij helpen u graag verder!</p>
<p>Heeft u vragen over Linuxmigratie? Ik help u graag verder!</p>
</div>
</section>
@ -99,7 +101,7 @@
<div class="contact-hours">
<h3>Openingstijden</h3>
<p>Maandag - vrijdag: 09:00 - 17:00 (op afspraak)</p>
<p>Maandag vrijdag: 09:00 17:00 (op afspraak)</p>
<p>Weekend: op afspraak</p>
</div>
</div>
@ -154,7 +156,7 @@
<div class="form-group">
<label for="message">Bericht *</label>
<textarea id="message" name="message" rows="5" required placeholder="Vertel ons over uw situatie en hoe wij u kunnen helpen...">{{.FormData.Message}}</textarea>
<textarea id="message" name="message" rows="5" required placeholder="Vertel iets over uw situatie en hoe ik u kan helpen...">{{.FormData.Message}}</textarea>
</div>
<button type="submit" class="btn btn-primary">Verstuur bericht</button>
@ -167,11 +169,11 @@
<section class="section section--light-green contact-cta">
<div class="container">
<h2>Waarom kiezen voor {{.CompanyName}}?</h2>
<div class="card card--ctas">
<div class="cta-benefits">
<div class="card card--cta">
<div class="card__icon">🎯</div>
<h3>Persoonlijke aanpak</h3>
<p>Elke klant is uniek, en wij bieden maatwerkoplossingen.</p>
<p>Elke klant is uniek. Ik lever maatwerkoplossingen.</p>
</div>
<div class="card card--cta">
<div class="card__icon">🛠️</div>
@ -181,12 +183,12 @@
<div class="card card--cta">
<div class="card__icon">🤝</div>
<h3>Volledige ondersteuning</h3>
<p>Van installatie tot training, wij begeleiden u door het hele proces.</p>
<p>Van installatie tot training: ik begeleid u door het hele proces.</p>
</div>
<div class="card card--cta">
<div class="card__icon">💚</div>
<h3>Duurzame keuze</h3>
<p>Samen bouwen we aan een duurzamere digitale toekomst.</p>
<p>U kiest voor een duurzamere digitale toekomst.</p>
</div>
</div>
</div>

View File

@ -15,7 +15,7 @@
<!-- Open Graph Meta Tags for Social Media -->
<meta property="og:title" content="{{.Title}}">
<meta property="og:description" content="Diensten en tarieven: Linux-installaties, advies, datamigratie en ondersteuning. Tarief: €20 per half uur.">
<meta property="og:image" content="https://{{.Domain}}/static/TuxAinrom.webp">
<meta property="og:image" content="https://{{.Domain}}/static/images/TuxAinrom.webp">
<meta property="og:image:alt" content="Diensten van {{.CompanyName}}">
<meta property="og:url" content="https://{{.Domain}}/diensten">
<meta property="og:type" content="website">
@ -86,7 +86,7 @@
<div class="cta-benefit">
<div class="benefit-icon">🧾</div>
<h3>Voorbeelden</h3>
<p>Installatie + basisinrichting: 12 uur. Migratie van gegevens: afhankelijk van volume en snelheid van opslag.</p>
<p>Installatie + basisinrichting: 1 à 2 uur. Migratie van gegevens: afhankelijk van volume en snelheid van opslag.</p>
</div>
<div class="cta-benefit">
<div class="benefit-icon">🔁</div>
@ -99,9 +99,9 @@
<section class="contact-content">
<div class="container">
<h2>Belangrijke disclaimer over back-ups</h2>
<p>Ik lever in de kern een Linux-installatie- en migratieservice en ben geen back-updienst. <strong>Back-ups maken en bewaren is in principe de verantwoordelijkheid van de klant.</strong> Als extra service kan ik op uw verzoek data kopiëren naar door u aangeleverde USB-sticks of een externe schijf.</p>
<p>Hoewel ik zorgvuldig werk, kan er bij datakopie of -migratie altijd een risico op dataverlies bestaan (bijvoorbeeld door defecte schijven, corrupte data of hardwarefouten). <strong>U blijft verantwoordelijk voor uw eigen data</strong>. Ik ben niet aansprakelijk voor verlies of beschadiging van gegevens. Ik adviseer altijd om vooraf een eigen back-up te maken.</p>
<h2>Belangrijk over backups</h2>
<p>Ik lever een Linuxinstallatie en migratieservice en ben geen backupdienst. <strong>Backups maken en bewaren is in principe de verantwoordelijkheid van de klant.</strong> Als extra service kan ik, op uw verzoek, data kopiëren naar door u aangeleverde USBsticks of een externe schijf.</p>
<p>Hoewel ik zorgvuldig werk, kan er bij datakopie of migratie altijd een risico op dataverlies bestaan (bijvoorbeeld door defecte schijven, corrupte data of hardwarefouten). <strong>U blijft verantwoordelijk voor uw eigen data</strong>. Ik ben niet aansprakelijk voor verlies of beschadiging van gegevens. Ik adviseer altijd om vooraf een eigen backup te maken.</p>
<div class="about-cta">
<a href="/contact" class="btn btn-primary">Vrijblijvend contact opnemen</a>
</div>

View File

@ -20,7 +20,7 @@
<h3>Gemeenschap</h3>
<p>Lid van <a href="https://nllgg.nl" target="_blank">Nederlandse Linux Gebruikers Groep</a> (NLLGG.nl)</p>
<p>Actief bij <a href="https://buurtlinux.nl" target="_blank">Buurtlinux.nl</a> initiatief</p>
<p>Wij ondersteunen de <a href="https://endof10.org" target="_blank">End-of-10</a>-beweging voor duurzaam computergebruik.</p>
<p>Ik ondersteun de <a href="https://endof10.org" target="_blank">Endof10</a>-beweging voor duurzaam computergebruik.</p>
<p><a href="/over-mij">Over mij</a> · <a href="/contact">Contact</a></p>
</div>
</div>

View File

@ -11,14 +11,12 @@
<meta name="author" content="{{.CompanyName}}">
<meta name="robots" content="index, follow">
<meta name="language" content="nl">
<meta name="revisit-after" content="7 days">
<meta name="distribution" content="global">
<meta name="rating" content="general">
<!-- Open Graph Meta Tags for Social Media -->
<meta property="og:title" content="{{.Title}}">
<meta property="og:description" content="Windows 10-ondersteuning eindigt binnenkort? Geef uw computer nieuw leven met Linux! Professionele Linux-migratieservice in gemeente Het Hogeland.">
<meta property="og:image" content="https://{{.Domain}}/static/TuxAinrom.webp">
<meta property="og:image" content="https://{{.Domain}}/static/images/TuxAinrom.webp">
<meta property="og:image:alt" content="Tux Linux mascotte banner voor Hogeland Linux service">
<meta property="og:url" content="https://{{.Domain}}/">
<meta property="og:type" content="website">
@ -29,7 +27,7 @@
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{.Title}}">
<meta name="twitter:description" content="Windows 10-ondersteuning eindigt binnenkort? Geef uw computer nieuw leven met Linux! Professionele Linux-migratieservice.">
<meta name="twitter:image" content="https://{{.Domain}}/static/TuxAinrom.webp">
<meta name="twitter:image" content="https://{{.Domain}}/static/images/TuxAinrom.webp">
<meta name="twitter:image:alt" content="Tux Linux mascotte banner voor Hogeland Linux service">
<!-- Favicon Links -->
@ -49,6 +47,8 @@
<!-- Preload Critical Resources -->
<link rel="preload" href="/static/css/style.css" as="style">
<link rel="preload" href="/static/images/TuxAinrom.webp" as="image">
<link rel="preconnect" href="https://fonts.googleapis.com" crossorigin>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" as="style">
<!-- CSS and Fonts -->
@ -110,43 +110,7 @@
</div>
</section>
<section id="voordelen" class="section section--light benefits">
<div class="container">
<h2><a href="/linux">Waarom Linux kiezen?</a></h2>
<div class="benefits-grid">
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon">🛡️</div>
<h3>Veilig en betrouwbaar</h3>
<p>Linux is van nature veiliger dan Windows. Minder virussen, geen gedwongen updates en volledige controle over uw systeem.</p>
</a>
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon">💰</div>
<h3>Volledig gratis</h3>
<p>Geen licentiekosten, geen abonnementen. Linux en alle software zijn gratis en open source.</p>
</a>
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon">🔄</div>
<h3>Oude hardware hergebruiken</h3>
<p>Uw computer van 10 jaar oud? Linux maakt hem weer snel! Geen nieuwe hardware nodig.</p>
</a>
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon">🌱</div>
<h3>Milieuvriendelijk</h3>
<p>Stop e-waste! Door Linux te gebruiken houdt u uw apparaten langer werkend en uit de afvalberg.</p>
</a>
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon">🔒</div>
<h3>Privacybescherming</h3>
<p>Geen tracking en geen verborgen gegevensverzameling. Uw privacy blijft van uzelf.</p>
</a>
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon"></div>
<h3>Snel en efficiënt</h3>
<p>Linux gebruikt minder systeembronnen, waardoor uw computer sneller opstart en soepeler werkt.</p>
</a>
</div>
</div>
</section>
{{template "benefits" .}}
<section id="windows10-eol" class="section windows-eol">
<div class="container">
@ -344,47 +308,7 @@
</div>
</section>
<section class="section section--light-green linux-features">
<div class="container">
<h2><a href="/linux">Linux in actie</a></h2>
<p class="section-subtitle">Zie hoe Linux eruitziet en werkt in de praktijk</p>
<div class="features-grid">
<div class="feature-showcase">
<div class="feature-image">
<img src="/static/images/Zorin-17-desktop.webp" alt="Zorin OS 17 Desktop Interface" loading="lazy">
<div class="image-caption">
<small>Bron: <a href="https://www.debugpoint.com/wp-content/uploads/2023/12/Zorin-17-desktop.jpg" target="_blank" rel="noopener">DebugPoint.com</a></small>
</div>
</div>
<h3>Moderne desktopinterface</h3>
<p>Linux ziet er vertrouwd en professioneel uit. Deze Zorin OS desktop lijkt op Windows maar is veel sneller en veiliger.</p>
</div>
<div class="feature-showcase">
<div class="feature-image">
<img src="/static/images/LinuxMintCinnamonSoftwareManager.webp" alt="Linux Mint Software Manager" loading="lazy">
<div class="image-caption">
<small>Bron: <a href="https://linuxmint.com" target="_blank" rel="noopener">LinuxMint.com</a></small>
</div>
</div>
<h3>Eenvoudig software installeren</h3>
<p>Duizenden gratis programma's met één klik installeren via de Software Manager. Net zo makkelijk als een app store.</p>
</div>
<div class="feature-showcase">
<div class="feature-image">
<img src="/static/images/GamingBenchmarkLinuxvsWindows.webp" alt="Gaming Performance Linux vs Windows" loading="lazy">
<div class="image-caption">
<small>Bron: <a href="https://www.youtube.com/watch?v=4LI-1Zdk-Ys" target="_blank" rel="noopener">Linux vs Windows Gaming Performance</a></small>
</div>
</div>
<h3>Gamingprestaties</h3>
<p>Linux kan vaak betere gamingprestaties leveren dan Windows, dankzij minder overhead en optimalisaties voor moderne games.</p>
</div>
</div>
</div>
</section>
{{template "linux_features" .}}
<section class="section cta">
<div class="container">

View File

@ -15,7 +15,7 @@
<!-- Open Graph Meta Tags for Social Media -->
<meta property="og:title" content="{{.Title}}">
<meta property="og:description" content="Maak kennis met populaire Linux-distributies en zie Linux in actie.">
<meta property="og:image" content="https://{{.Domain}}/static/TuxAinrom.webp">
<meta property="og:image" content="https://{{.Domain}}/static/images/TuxAinrom.webp">
<meta property="og:image:alt" content="Linux distributies en functies">
<meta property="og:url" content="https://{{.Domain}}/linux">
<meta property="og:type" content="website">
@ -46,47 +46,11 @@
<section class="page-hero">
<div class="container">
<h1>Waarom Linux?</h1>
<p>Nieuw bij Linux? Geen zorgen. Linux is een veilig en snel besturingssysteem dat uw huidige computer nieuw leven kan geven zonder licentiekosten. Hieronder leest u kort de voordelen en ziet u voorbeelden en populaire keuzes.</p>
<p>Nieuw bij Linux? Geen zorgen. Linux is een veilig en snel besturingssysteem dat uw huidige computer nieuw leven kan geven, zonder licentiekosten. Hieronder vindt u een korte beslishulp, mijn aanpak en voorbeelden in beeld.</p>
</div>
</section>
<section class="section section--light benefits">
<div class="container">
<h2>Voordelen van Linux</h2>
<div class="benefits-grid">
<div class="card card--benefit">
<div class="card__icon">🛡️</div>
<h3>Veilig en betrouwbaar</h3>
<p>Linux is van nature veiliger dan Windows. Minder virussen, geen gedwongen updates en volledige controle over uw systeem.</p>
</div>
<div class="card card--benefit">
<div class="card__icon">💰</div>
<h3>Volledig gratis</h3>
<p>Geen licentiekosten, geen abonnementen. Linux en alle software zijn gratis en open source.</p>
</div>
<div class="card card--benefit">
<div class="card__icon">🔄</div>
<h3>Oude hardware hergebruiken</h3>
<p>Uw computer van 10 jaar oud? Linux maakt hem weer snel! Geen nieuwe hardware nodig.</p>
</div>
<div class="card card--benefit">
<div class="card__icon">🌱</div>
<h3>Milieuvriendelijk</h3>
<p>Stop e-waste! Door Linux te gebruiken houdt u uw apparaten langer werkend en uit de afvalberg.</p>
</div>
<div class="card card--benefit">
<div class="card__icon">🔒</div>
<h3>Privacybescherming</h3>
<p>Geen tracking en geen verborgen gegevensverzameling. Uw privacy blijft van uzelf.</p>
</div>
<div class="card card--benefit">
<div class="card__icon"></div>
<h3>Snel en efficiënt</h3>
<p>Linux gebruikt minder systeembronnen, waardoor uw computer sneller opstart en soepeler werkt.</p>
</div>
</div>
</div>
</section>
{{template "benefits" .}}
<section class="section section--light-green distros">
<div class="container">

View File

@ -0,0 +1,40 @@
{{define "benefits"}}
<section id="voordelen" class="section section--light benefits">
<div class="container">
<h2><a href="/linux">Waarom Linux kiezen?</a></h2>
<div class="benefits-grid">
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon">🛡️</div>
<h3>Veilig en betrouwbaar</h3>
<p>Linux is van nature veiliger dan Windows. Minder virussen, geen gedwongen updates en volledige controle over uw systeem.</p>
</a>
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon">💰</div>
<h3>Volledig gratis</h3>
<p>Geen licentiekosten, geen abonnementen. Linux en alle software zijn gratis en open source.</p>
</a>
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon">🔄</div>
<h3>Oude hardware hergebruiken</h3>
<p>Uw computer van 10 jaar oud? Linux maakt hem weer snel! Geen nieuwe hardware nodig.</p>
</a>
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon">🌱</div>
<h3>Milieuvriendelijk</h3>
<p>Stop e-waste! Door Linux te gebruiken houdt u uw apparaten langer werkend en uit de afvalberg.</p>
</a>
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon">🔒</div>
<h3>Privacybescherming</h3>
<p>Geen tracking en geen verborgen gegevensverzameling. Uw privacy blijft van uzelf.</p>
</a>
<a class="card card--benefit card-link" href="/linux">
<div class="card__icon"></div>
<h3>Snel en efficiënt</h3>
<p>Linux gebruikt minder systeembronnen, waardoor uw computer sneller opstart en soepeler werkt.</p>
</a>
</div>
</div>
</section>
{{end}}

View File

@ -0,0 +1,41 @@
{{define "linux_features"}}
<section class="section section--light-green linux-features">
<div class="container">
<h2><a href="/linux">Linux in actie</a></h2>
<p class="section-subtitle">Zie hoe Linux eruitziet en werkt in de praktijk</p>
<div class="features-grid">
<div class="feature-showcase">
<div class="feature-image">
<img src="/static/images/Zorin-17-desktop.webp" alt="Zorin OS 17 Desktop" loading="lazy">
<div class="image-caption">
<small>Bron: <a href="https://www.debugpoint.com/wp-content/uploads/2023/12/Zorin-17-desktop.jpg" target="_blank" rel="noopener">DebugPoint.com</a></small>
</div>
</div>
<h3>Moderne desktopinterface</h3>
<p>Ziet er vertrouwd uit, werkt snel en stabiel. Ideaal voor dagelijks gebruik.</p>
</div>
<div class="feature-showcase">
<div class="feature-image">
<img src="/static/images/LinuxMintCinnamonSoftwareManager.webp" alt="Linux Mint Softwarebeheer" loading="lazy">
<div class="image-caption">
<small>Bron: <a href="https://linuxmint.com" target="_blank" rel="noopener">LinuxMint.com</a></small>
</div>
</div>
<h3>Eenvoudig software installeren</h3>
<p>Duizenden gratis programmas met één klik via Softwarebeheer.</p>
</div>
<div class="feature-showcase">
<div class="feature-image">
<img src="/static/images/GamingBenchmarkLinuxvsWindows.webp" alt="Gamingprestaties Linux versus Windows" loading="lazy">
<div class="image-caption">
<small>Bron: <a href="https://www.youtube.com/watch?v=4LI-1Zdk-Ys" target="_blank" rel="noopener">Linux vs Windows Gaming Performance</a></small>
</div>
</div>
<h3>Gamingprestaties</h3>
<p>Prima geschikt voor gaming dankzij moderne drivers en optimalisaties.</p>
</div>
</div>
</div>
</section>
{{end}}