# Technologie-analyse — time4gifts.nl

*Meting 2026-09-04 door MagicEverse. Bronnen: HTTP-headers, HTML/CSS van home, shop, contact en een productpagina, WordPress/WooCommerce REST API, DNS, TLS, Wayback Machine, asset-download. Ruwe data in `_raw/scan.json`.*

---

## 1. Samenvatting

Time 4 Gifts draait op een **professioneel gebouwde WordPress + WooCommerce-site** (thema van bureau Chef du Web, gehost bij **Kinsta** achter **Cloudflare**), online sinds 2015 en in deze vorm gebouwd in **2019–2021**, met een actieve redactie: 100+ producten toegevoegd in 2026, laatste product op de dag van deze meting. Het is **geen webshop maar een offerte-catalogus**: WooCommerce is omgebouwd tot "offertelijst" (YITH Request a Quote), prijzen zijn "vanaf"-indicaties of op aanvraag, er is geen checkout of betaalprovider.

Technisch is de basis goed (snelle TTFB 0,2 s via Kinsta-cache, actuele WP/WC-versies, cookiebanner met categorieën, SEO met Yoast en schema.org). Aandachtspunten:

1. **Zware media:** originele uploads van 4–10 MB per foto (de homepage laadt twee PNG's van 4 MB), totaal 9,5 MB aan assets op de homepage.
2. **Security-hygiëne:** geen HSTS, CSP, X-Frame-Options of Referrer-Policy; `readme.html` en de users-endpoint (4 accounts met namen) staan open.
3. **E-mail-authenticatie:** SPF eindigt op `?all` (neutraal) en DMARC staat op `p=none` — mail namens time4gifts.nl is makkelijk te spoofen.
4. **Plugin-zwaarte:** 20+ plugins (twee chatwidgets geladen: Crisp én Tawk), Jetpack, Pinterest, WooCommerce POS-endpoints; de Store API geeft een 500.
5. **Personalisatie zit niet in de site:** logo-upload/bedrukking loopt via de offerte, er is geen configurator of proefdruk.

## 2. Platform en stack

| Onderdeel | Bevinding |
|---|---|
| CMS | WordPress **6.9.7** (actueel), Gutenberg-blokken; taal nl-NL |
| E-commerce | **WooCommerce 10.5.3**, ingezet als catalogus; `wc/v3`, `wc/store`, `wc/pos` endpoints actief |
| Thema | **chef-gutenberg-theme** (parent, Chef du Web) + child **time4gifts**; eigen blokken (`chef-blocks`): hero, card-repeater, usp-repeater, cta-with-button, product-slider, form-block; CSS in losse per-blok-bestanden |
| Offerte-flow | **YITH WooCommerce Request a Quote Premium** (offertelijst, "Aanvragen"), **YITH Advanced Product Options Premium** (opties per product), **YITH Wishlist** (verlanglijst) |
| Zoeken/filteren | Advanced Woo Search (ajax-zoek), BeRocket WooCommerce AJAX Filters |
| Formulieren | Gravity Forms (contact, nieuwsbrief), Cookie Law Info (CookieYes) banner met categorieën |
| Overig | Yoast SEO (sitemap, schema), Redirection, Duplicate Post, Regenerate Thumbnails, Crop Thumbnails, Jetpack, Pinterest for WooCommerce, DMS |
| Chat | **Crisp én Tawk.to** beide aanwezig in de broncode |
| Analytics | GA4 `G-SQ8FQVFMS5` via gtag; geen Meta Pixel gevonden |
| JavaScript | jQuery + Modernizr 2.8.3 (2014, van cdnjs), Gravity Forms, YITH, BeRocket, slider, thema-scripts |
| Fonts | Manrope (Google Fonts, extern geladen), Font Awesome 5 + Dashicons + YITH-iconfonts (zelf gehost) |
| Beheerders (REST users) | `pascal` (Chef Supportteam), `elke`, `patricia`, `samira` |

## 3. Hosting, DNS en TLS

| Onderdeel | Bevinding |
|---|---|
| Edge | **Cloudflare** (anycast 162.159.134.42, `CF-Cache-Status: DYNAMIC`), HTTP/3 |
| Origin | **Kinsta** (headers `ki-edge`, `ki-origin: g1p`, `x-kinsta-cache: HIT`) — managed WordPress-hosting |
| DNS | ns1/ns2.flexwebhosting.nl, ns3.flexwebhosting.com (Flexwebhosting) |
| Mail | Google Workspace (MX aspmx.l.google.com); uitgaande marketingmail via Mandrill (`include:spf.mandrillapp.com`) |
| SPF | `v=spf1 include:spf.mandrillapp.com ?all` ⚠️ — Google zelf ontbreekt in SPF en `?all` is neutraal |
| DMARC | `v=DMARC1; p=none;` ⚠️ (alleen monitoren, niets afdwingen) |
| TLS | Google Trust Services (Cloudflare-certificaat), TLS 1.3, wildcard `*.time4gifts.nl`, geldig tot 22-10-2026 |
| HSTS | ❌ niet gezet |
| TTFB / totaal | 0,21 s (Kinsta-cache HIT), HTML 136 KB |

## 4. Leeftijd en onderhoud

| Signaal | Datum |
|---|---|
| Eerste Wayback-snapshot | 13-03-2015 (jaarlijks gearchiveerd t/m 2026) |
| Huidige site | Home en Privacy aangemaakt **12-12-2019**; kernpagina's (Wat we doen, Wie we zijn, Contact, categoriepagina's, Offertelijst) **maart–april 2021** → de huidige opzet is ± 5 jaar oud, met een Gutenberg/WooCommerce-basis die netjes is meegegroeid |
| Nieuwe pagina's 2026 | Blog (mei), Wensenlijst (juni); Kerstpakketten bijgewerkt 30-06-2026 |
| Producten | 100+ producten met datum mei–sept 2026 (laatste: 04-09-2026); 100 categorieën, grootste: Kantoorbenodigdheden (290), 3D relatiegeschenken (222), Beurzen & Evenementen (211), Home & Wellness (203), Eco (199), Drinkwaren (190) |
| Blog | 40 berichten, 2020 → juli 2026 (projecten, updates, cases) |
| Media | 91 uploads sinds juli 2026 alleen al |

Conclusie: **volwassen site, actief beheerd** door een klein team plus bureau-support (account "Chef Supportteam"). Techniek en plugins worden bijgehouden; de opzet uit 2021 wordt niet meer fundamenteel doorontwikkeld.

## 5. Performance

| Meting | Waarde |
|---|---|
| HTML homepage | 136 KB |
| Same-origin assets op home | 82 bestanden, **9,5 MB** |
| Grootste bestanden | `collage3.png` **4,0 MB**, `Ontwerp-zonder-titel-1-1.png` **3,8 MB** (categorie-collages als PNG i.p.v. WebP), daarna foto's van 50–160 KB |
| Originele uploads | teamfoto's van **10,6 MB** (`17-1.jpg`), 7,4 MB, 6,4 MB … — WordPress serveert verkleinde versies, maar de originelen staan open en vullen de opslag |
| CSS | 14 thema-stylesheets + plugin-CSS (BeRocket 187 KB, Font Awesome 31 KB, CookieYes 27 KB), veel ongebruikte iconfonts (Dashicons, YITH) op de front-end |
| JS | jQuery, Modernizr (2014), Gravity Forms, YITH, BeRocket, slider ≈ 500 KB; twee chat-widgets |
| Caching | Kinsta page-cache HIT, Cloudflare als proxy (geen page-cache: DYNAMIC); geen zichtbare `Cache-Control` voor HTML |

**Beoordeling:** dankzij Kinsta-cache is de server snel, maar de pagina zelf is zwaar door twee 4 MB-PNG's en de plugin-stapel. Quick win: collages als WebP (< 200 KB), originelen begrenzen, één chat-widget, iconfonts uitzetten.

## 6. Security

| Check | Resultaat |
|---|---|
| X-Content-Type-Options | ✅ nosniff |
| Strict-Transport-Security | ❌ ontbreekt (in Cloudflare met één vinkje aan te zetten) |
| Content-Security-Policy / X-Frame-Options / Referrer-Policy / Permissions-Policy | ❌ ontbreken |
| `/wp-json/wp/v2/users` | ⚠️ open: vier gebruikersnamen (`pascal`, `elke`, `patricia`, `samira`) |
| `/readme.html` | ⚠️ bereikbaar; generator-meta toont WP- en WC-versie |
| `xmlrpc.php` | ✅ 403 |
| WooCommerce Store API | ⚠️ `/wp-json/wc/store/v1/products` geeft **HTTP 500** — wijst op een plugin-conflict |
| REST-namespaces | veel oppervlak: `wc/pos`, `wc-admin`, `wc-telemetry`, `jetpack`, `pinterest`, `dms`, `cookieyes` |
| Externe scripts | Modernizr 2.8.3 van cdnjs (2014, geen SRI) |

Geen acute kwetsbaarheid gezien; wel het gebruikelijke "managed hosting is veilig, dus niemand deed hardening"-beeld.

## 7. Privacy en AVG

- ✅ Cookiebanner (Cookie Law Info / CookieYes) met categorieën Necessary/Functional/Performance/Analytics/Advertisement.
- ⚠️ Te controleren of GA4, Crisp, Tawk en Pinterest daadwerkelijk wachten op toestemming; de `__cf_bm`-cookie van Cloudflare is functioneel.
- ✅ Privacy Policy, Disclaimer en Leveringsvoorwaarden aanwezig (bijgewerkt juni 2026).
- Twee chat-leveranciers (Crisp en Tawk) betekent twee verwerkers in de privacyverklaring; waarschijnlijk is er één in onbruik.

## 8. SEO en content

| Check | Resultaat |
|---|---|
| Title/description | ✅ "Time4Gifts is de specialist in gepersonaliseerde relatiegeschenken." + description |
| H1 | ⚠️ homepage heeft **geen h1** (de hero-kop is geen heading); productpagina's wel |
| Sitemap/robots | ✅ Yoast `sitemap_index.xml`; robots verwijst naar `www.`-variant terwijl de site zonder www draait |
| Schema.org | ✅ Yoast-graph (WebPage, Organization, ItemPage, breadcrumbs) |
| Product-SEO | productpagina's onder `/onze-catalogus/<slug>/`, met beschrijving, 13 galerij-afbeeldingen, categorie; **geen prijs/aanbod in schema** (Prijs op aanvraag) |
| Rommel | dubbele bedankpagina's (`/contact-bedankt-pagina/`, `/bedankt-voor-je-aanvraag/`), oude landingspagina's uit 2021 (Brievenbus, Promotie snoep) niet meer bijgewerkt |
| Afbeeldingen | packshots als `-removebg-preview.png` (rembg-uitvoer), wisselende kwaliteit; alt-teksten deels aanwezig |
| Blog | actief (40 posts), goed voor long-tail |

## 9. Mobiel en toegankelijkheid

- Responsive thema: topbalk scrollt horizontaal, hamburger links, logo midden, iconen rechts, hero-blob boven de tekst. Werkt netjes.
- Cookiebanner neemt op mobiel een groot deel van het scherm in.
- Contrast: #252122 op wit ruim voldoende; **wit op roze #FC73A7 haalt ± 2,6:1** (onder WCAG AA voor knoptekst van 20 px bold is 3:1 nodig) → knoppen zijn net te licht; roze tekstlinks op wit idem.
- Skiplink aanwezig, iconen met aria-labels ("Link naar facebook").

## 10. Wat de site wél en niet doet

| Functie | Hoe |
|---|---|
| Catalogus | WooCommerce, 100 categorieën, ajax-filters en -zoeken, mega-menu |
| Offerte | YITH Request a Quote: "Aanvragen" → offertelijst → formulier; geen prijsberekening, geen staffels online |
| Verlanglijst | YITH Wishlist (hart-icoon met teller) |
| Bestellen/betalen | **niet aanwezig** (geen checkout, geen PSP) |
| Personalisatie | alleen als tekst ("Bedruk met jouw logo"); geen logo-upload, drukposities, proefdruk of visualisatie |
| Kerstpakketten | contentpagina met 3 stappen (offerte → showroombezoek in Oss of digitaal → inpakken bij een sociale werkplaats in Nijmegen) en 7 voorbeeldpakketten; samenstellen gebeurt in de showroom, niet online |
| Contact | Gravity Forms, chat (Crisp/Tawk), telefoon; team-pagina met foto's |
| Nieuwsbrief | Gravity Forms → waarschijnlijk Mandrill/Mailchimp |

## 11. Aanbevelingen

**Quick wins (uren)**
1. HSTS + security-headers via Cloudflare (Transform Rules), users-endpoint en `readme.html` dichtzetten, generator-tag uit.
2. SPF repareren (`include:_spf.google.com include:spf.mandrillapp.com -all`) en DMARC naar `p=quarantine` — het bedrijf verstuurt offertes per mail, spoofing is een reëel risico.
3. De twee 4 MB-collages naar WebP; upload-limiet/auto-resize voor foto's; één chat-widget kiezen.
4. H1 op de homepage; robots-sitemap-URL zonder www; Store API-500 laten oplossen door het bureau.
5. Bureau vragen welke YITH-opties (product options) echt gebruikt worden; anders uitzetten.

**Structureel (waar MagicEverse waarde toevoegt)**
- **Magic Logo op de productpagina**: de klant zet zijn logo direct op de mok, fles of powerbank, kiest drukpositie en techniek en krijgt een proefdruk — precies het gat tussen "Bedruk met jouw logo" en de offerte. Sluit aan op de bestaande offertelijst (YITH) als de "winkelwagen".
- **PIM/leveranciersdata**: 2.000+ producten worden nu handmatig in WooCommerce gezet (packshots via rembg); een koppeling met leveranciersfeeds (XD Connects, Midocean, PF Concept …) houdt assortiment, prijzen en staffels actueel.
- **Kerstpakket-samensteller** ("Stel samen" is nu een statische pagina) en **offerte met staffelprijzen** in plaats van "Prijs op aanvraag" — minder handwerk voor het team van vier.
- **Magic Agent** op de site/WhatsApp naast de chat: productadvies, offerte-aanvraag en status, buiten kantooruren.

## 12. Scorekaart

| Gebied | Score (1-5) | Toelichting |
|---|---|---|
| Actualiteit platform | ★★★★★ | WP 6.9.7 / WC 10.5.3, Kinsta + Cloudflare |
| Onderhoud content | ★★★★★ | dagelijks producten, blog, seizoenscampagnes |
| Design/merk | ★★★★☆ | consistent, eigen bureau-thema, herkenbaar roze/pastel; knopcontrast te laag |
| Performance | ★★★☆☆ | snelle server, zware pagina (9,5 MB, 4 MB-PNG's, 20+ plugins) |
| Security | ★★☆☆☆ | geen HSTS/CSP, users open, Store API 500 |
| E-mail/DNS | ★★☆☆☆ | SPF `?all`, DMARC none |
| Privacy/AVG | ★★★★☆ | banner met categorieën; dubbele chat-widget |
| SEO | ★★★★☆ | Yoast, schema, blog; geen h1 op home |
| Conversieflow | ★★★☆☆ | offertelijst werkt, maar geen prijzen, staffels, personalisatie of samensteller |
