The problem
Italian speakers who want to use Claude find most guides in English and spread across many places. The site needed to collect practical guides, prompts, tutorials and comparisons in Italian, organised by profession. Beyond the articles, it also needed to teach in a structured way, certify what people learned and let developers sell ready-made Claude projects.
What I built
I built a custom WordPress theme that turns ClaudeItalia.it into an Italian learning hub for Claude, with courses, certification and a marketplace.
- Structured content: 6 content types (guides, prompts, tutorials, comparisons, projects and videos) with topic and profession taxonomies, reading time and level. A mega menu groups 12 professional categories, so a lawyer or a teacher finds their own material first.
- Certification with exams: programmes with levels from A1 to C2 and a pool of questions. Questions and answer order are random, each question has a timer, and switching tab shows a warning. A pass issues a certificate with a unique code and a QR code to verify it; certificates can be revoked.
- Lessons: modules, lesson content, FAQ and a chat for each learning path. Students upload projects and the teacher grades them from 0 to 100 with feedback.
- Developer marketplace: developers publish projects from their own front-end area. Sales go through Stripe Checkout, with Stripe Connect Express onboarding for payouts and a 30% default platform commission. Invoices are built as FatturaPA 1.2.2 XML, the Italian e-invoicing format, and sent through the Aruba API.
- Social publishing: content goes to a Facebook Page, a LinkedIn company page and X, with OAuth 2.0 and automatic token renewal. Each post gets a short link and a suggested tweet.
- Site operations: live visitors, per-post views, AdSense slots with an ads.txt editor, WebP image conversion, JSON-LD schema on top of Yoast, Google login and an on-site chat with the team.
Built with
A custom WordPress theme in PHP, with custom MySQL tables for exam attempts, certificates, sales and payouts. Plain JavaScript on the front end. Stripe for payments, the Aruba e-invoicing API, OAuth with Google, Meta, LinkedIn and X, RSS feed management and an OpenAI helper. A must-use plugin sets cache headers on the cPanel hosting.
Why it was done this way
For live visitors I did not count server requests. The pages are cached, so a request count would miss most visits. Instead, a small script on each page sends a ping every 30 seconds through AJAX, which works even on cached pages. For privacy, the IP address is stored only as a hash, the visitor token stays in the browser’s local storage instead of a tracking cookie, and old records are cleaned every day.


