My porn website built with Claude AI

One question — how are you handling the ExoClick approval process? That's usually the bottleneck for new domains.
The approval process for ExoClick was automated (since I operate as a company), whereas it was manual for Fap.cash and Xvideos which use the same structure as Fap.cash.
 
[Update] Session of June 29, 2026

Quality cleanup (continued)

Removal of videos imported overnight from incorrect sources (amateur Paris, French teen, French *beurette*, etc.); the cron job had run before we corrected the list.
SEARCH_QUERIES list permanently cleaned; no more English keywords.
Added new keywords to exclude: nuru, massage, subtitle, subbed, teenfidelity, fake taxi, stepmother, stepdaughter, etc.
Clean total: 3,376 100% French videos.

Clean SEO URLs

Slug generation for the 1,017+ new videos imported overnight.
301 redirects active for all videos.

️ Category badges

Badge priority improved: Anal, MILF, Lesbian, Beurette, etc., now take precedence over Amateur.
`fill_categories.py` script run manually; 122 new categories inserted.

⚡ Tonight at 4:00 AM

The XVideos cron job will run using the cleaned list for the first time.
We should retrieve only genuinely French content.
 
[Update] June 29, 2026

Issue of the day: post_x.py had stopped posting to X

The Playwright script automating posts for the @P********c**s** account had failed; X had modified its interface, and the `tweetTextarea_0` selector no longer existed.
Investigation revealed that X was silently blocking headless connections originating from datacenter IPs, making login impossible even with a persistent session.
Solution: migration to the official X API (tweepy)
Completely abandoned Playwright in favor of the X API via tweepy (OAuth 1.0a) using the @P********c**s** developer account; this required:

1. Updating app permissions to "Read & Write"
2. Adding $5 in credits (Pay-Per-Use plan, ~$0.15/month for 1 tweet/day)
3. Completely rewriting post_x.py

New script features:

1. Automatic posting of one video per day at 10:00 PM Paris time
2. Thumbnail automatically uploaded as the tweet image
3. Dynamic hashtags generated based on the title (#Partouze, #MILF, #Beurette, #Amateur, etc.)
4. Priority given to exclusive Bunny.net videos, with a fallback to XVideos/Eporner
5. Video marked `posted_x=1` after publication to prevent duplicates
 
Last edited:
Wrapping up the day : Twitter Cards
After successfully posting the first tweet, I noticed that clicking the image didn't redirect to the site. This is expected behavior on X: manually uploaded images aren't clickable.
The solution: Twitter Cards. I added the `twitter:card`, `twitter:image`, `twitter:title`, etc., meta tags to `video.php` and modified the script to stop uploading the image manually. Now, X automatically generates a clickable preview from the URL; the thumbnail appears and redirects to the video page when clicked.
The first tweet with a working Twitter Card was posted at 3:51 PM. A cron job is set up for 10 PM (Paris time) for subsequent posts.
 
[Update] Session of June 30, 2026

1. Fixed Bunny thumbnail (video 15630; incorrect filename in database)
2. Fixed missing `os` import bug in `import_eporner.py`
3. Added automatic cache purge to `admin_descriptions.php` after each Bunny addition
4. Tnaflix cron jobs: none existed, so no action required
5. X account: posting functionality confirmed working

The journey goes on... :smirk:
 
[Update] Session of June 30, 2026

1. Fixed Bunny thumbnail (video 15630; incorrect filename in database)
2. Fixed missing `os` import bug in `import_eporner.py`
3. Added automatic cache purge to `admin_descriptions.php` after each Bunny addition
4. Tnaflix cron jobs: none existed, so no action required
5. X account: posting functionality confirmed working

The journey goes on... :smirk:
how is daily traffic ?
 
[Update] Session of June 30, 2026

1. Fixed Bunny thumbnail (video 15630; incorrect filename in database)
2. Fixed missing `os` import bug in `import_eporner.py`
3. Added automatic cache purge to `admin_descriptions.php` after each Bunny addition
4. Tnaflix cron jobs: none existed, so no action required
5. X account: posting functionality confirmed working

The journey goes on... :smirk:
About X accounts, did you use their API? or did you create a puppeteer bot? The X API has a small $ after a few videos is done :)
 
About X accounts, did you use their API? or did you create a puppeteer bot? The X API has a small $ after a few videos is done :)
Based on the current information (the pay-per-use model has been in effect since February 2026, with pricing updated in April 2026), here are X's pricing tiers:

For posting:
  • Plain post (text or media, no link): $0.015 per post
  • Post containing a link: $0.20 per post, a massive increase compared to the previous pricing.
Posts containing a URL now cost $0.20 per request, representing a 1,900% increase over the original price of $0.010.
 
Last edited:
Claude shows me this type of message from time to time because of NSFW content:
'A significant number of your prompts have violated our Acceptable Use Policy. This is why we have temporarily applied enhanced security filters to your conversations.' Nothing too serious, it goes away after a few days.
 
[Update] June 30, 2026 - Complete security session recap:

- Cloudflare mode switched from "Flexible" to "Full (strict)" — end-to-end encryption is now real
- Fake self-signed certificate replaced with a real Let's Encrypt certificate (valid until September 28, auto-renewal via acme.sh --cron already in place)
- HTTPS VirtualHost (port 443) created for Apache, which didn't exist before
- HSTS enabled and confirmed in response headers
- XSS vulnerability fixed on categories.php
- Full ZAP scan: 0 FAIL

That's huge progress in one session, the website is significantly more secure now than it was at the start of the day.
 
how is daily traffic ?
I'm sorry, but for now, with only 1–2 days of data, it's not yet usable for strategic decisions (most viewed pages, bounce rate, traffic sources over time), but it does confirm that:

  • Tracking is working properly
  • Twitter traffic converts into real visits
  • I have a growing organic audience base
 
Hey everyone,

I wanted to share my experience building a 100% French adult tube site I launched just a few days ago.

1. The concept :

A free French porn video site with a clean, professional design, automatically fed by imports from Eporner, XVideos and Xhamster.

2. Tools used :

- Google Stitch to generate the initial design and HTML/CSS structure in minutes
- Claude AI for everything else: PHP conversion, MariaDB database, automatic import scripts, English → French title translation via the Anthropic API, ad integration (ExoClick, FapCash), SEO, Apache security

3. What Claude actually did :

- Python auto-import scripts (cron every 3-4h)
- 2,400+ videos imported and translated automatically
- FapCash widget with hover trailer preview
- Popunder + In-Page Push via ExoClick
- Legal pages (DMCA, GDPR, 2257, Terms)
- Dynamic sitemap, Schema.org, SEO meta tags

4. Results after 3 days :

862 visits, +770% vs previous week
France leading the traffic ✅

5. Conclusion : With no advanced dev skills, I was able to build a fully functional site in just a few days. Stitch for the design, Claude for all the backend and automation. The combo is insanely powerful.

Any questions ?
Yes, did you monetise it?
 
[Update] July 1, 2026

Secrets security: admin password removed from code and hashed (bcrypt) in pf_secrets.php outside webroot, with password_verify + session regeneration; Bunny API key regenerated (0ca8ed7d), moved to pf.env (Python) and pf_secrets.php (PHP), old key revoked. Both validated as functional.

Cache: admin page, home, and Matomo excluded from Cloudflare cache. Lesson learned and documented, Cache Rules are cumulative, the last matching rule wins, so a bypass must be placed after the 'Cache Everything' rule.
 
[Update] Session summary for July 2, 2026 : "video invisible on home page" bug

Root cause identified: the bug was neither in the rendering nor the chronological sorting, but in the fallback ?? 'thumbnail.jpg' in admin_descriptions.php.

Context:
  • When adding a video, the Bunny API didn't always return thumbnailFileName immediately (in cases where custom thumbnails hadn't propagated yet).
  • The code would then automatically fall back to thumbnail.jpg.
  • However, for a video with a custom thumbnail, thumbnail.jpg doesn't exist → HTTP 404 error.
  • functions.php would then generate a broken video card, which the theme would automatically ignore/skip.
Fix applied:
  • added an API retry (3× with sleep(2))
  • mandatory validation of an HTTP 200 response before insertion
  • if thumbnail isn't available → insertion is cleanly blocked
  • backup created: admin_descriptions.php.bak9
Checks performed:
  • syntax validation with php -l
  • targeted checks via sed -n
Special case handled today (video 17301):
  • the video was actually correct from the start
  • the API had indeed returned thumbnail_6c0158d5.jpg
  • the thumbnail was responding with HTTP 200
  • the issue was ultimately the browser cache (max-age=3600)
Observed effect:
  • a test UPDATE temporarily broke then restored the display
  • the video was immediately visible in private browsing
  • conclusion: functionality is working correctly, browser cache was responsible for the false positive.
 
I'm hoping you're not based in France. ID laws for porn are for all sites, not just the big ones
 
Last edited:
how many visits per day for now ?
It's too early to do a full assessment, I'll do it on the 7th, since Matomo was installed on the server on June 27.
 
Pretty impressive build tbh. The tech seems solved, but traffic, age-verification laws and relying on third-party embeds look like the real risks now. Curious how many pages Google keeps indexed after a few weeks.
 
Back
Top