XaiJu
@CJ_Clippy
@CJ_Clippy

patreon


Introducing future.porn

Futureporn 2.0 is here, and it’s better because it’s smaller, simpler, and focused.

https://future.porn

future.porn gives patrons the ability to create vtubers and upload vods. Finally, this isn't just my project. This is our project.

A massive productivity boost

By simply taking 2 weeks off! Refusing to work! Enjoying video games and other hobbies! Who knew there was more to life than just work? (To the patron who suggested I take a vacation-- thank you!)

I changed my mind, again, again

Last month I wrote about my plan to switch to a CMS because I wanted to do less work. Instead, I'm building one. I'm building a bespoke thing because that's how we realize the vision. I'm building bespoke because I remembered what work is about. Why do we work in the first place? Why do we create?

We work in order to serve others. Futureporn is a niche website for a niche audience. Lewdtubing is a relatively new thing and the community is under served. Futureporn fills a gap.

We work so we can bring our unique vision to life. How do you build a website? With a CMS. How do you build a Futureporn? From the ground up.

We work to improve our skills so we can build better things. Building is the best way I know to learn things. Building earns us EXP.

We work to build a better future. Futureporn is all about the data, data that gives insight and enriches our lives.

Pizza

The fewer things we do to the ingredients, the better the final product

https://www.youtube.com/watch?v=VNJcOvIngPQ

I love this idea so much, and it's a big part of why I built 2.0 the way I did. Fewer moving parts, fewer systems, fewer build steps. Less is more.

Nerd stuff

Under the hood, future.porn is a Node.js Fastify server, generating sever-rendered HTML using handlebars templates. The database is the powerful and familiar Postgres, which is the database, caching layer, and provides LISTEN/NOTIFY (PubSub). Backend tasks are fulfilled by graphile-worker, a node library which uses the same Postgres db instead of needing a separate key/value store or PubSub. If there are lots of tasks, multiple worker instances can be started using terraform and ansible. Multiple Fastify servers can be spun up if there's lots of visitors. There's a load balancer to spread the load across all the servers. The whole system is horizontally scalable for when we need it.

A big pain point of Futureporn 1.0 was the lack of an Object Relational Model (ORM.) This is the layer that abstracts the database query language (SQL) into a more ergonomic format. future.porn uses Prisma, a hugely popular ORM in the Javascript space. This will help me focus on data models and how they relate to eachother, then make queries in a standardized, type-safe way. In theory, I'll write less SQL, which is a big load off my shoulders.

After having tried Backbone, Vue, Svelte, React, I'm so jaded. JAMSTACK is a lie, serverless is a lie-- you actually need a server to do work. Client JS Frameworks are modern Platform-as-a-service (PaaS) or Function-as-a-service (FaaS) onboarding tools. In other words, someone else's server. Next.js is fancy onboarding for Vercel. Nest is fancy onboarding for MAU. Strapi is fancy onboarding for Strapi Cloud. Wordpress is fancy onboarding for Wordpress Marketplace.

In this chapter of my Software development journey, Javascript on the frontend is generally frowned upon, and ideally I'd like to eliminate it. Practically, it's extremely difficult to go JS free, and we still need something minimal to handle button presses and AJAX. For this we're using Alpinejs and htmx.

For style sheets, I've gone with another minimalist library, pico.css. It's been great for prototyping because I don't have write any CSS or even add CSS classes to the markup. This way I can just focus on data and pico makes it look nice.

The video player is video.js. It's default theme is kind of ugly, but I think it has the best cross-platform compatibility, and I know it has good performance compared to other video players I've tried. We'll run with it for now.

HTTP Live Streaming (HLS) packaging is done on the backend task processor using Shaka packager. Originally I was thinking of using Superstreamer, a FOSS video transcoding platform, but it's too new and I couldn't get it to run encoding tasks reliably. I'm keeping my eye on that project, since video encoding has a huge domain with it's own learning curve. Superstreamer would abstract a lot of that, but it does come with it's own downsides. More external dependencies, it's own database/migrations/redis/API/JS-framework-frontend-to-the-frontend-backend-to-the-frontend-backend-to-the-backend-frontend-to-the-backend. It's a bunch more services to maintain, and why do that when I can integrate the heart of Superstreamer (Shaka packager) directly into future.porn's backend task processor? It's fewer moving parts, but it also means I have to learn a lot more about video. But that's a good thing, because knowledge is power! Yeah, let's grasp at the power.

Auth. Why is auth so hard? I think I have trauma from implementing auth a different way about a dozen times over the past 5 years. Anyway, keeping it simple again, Patreon oauth is handled by @fastify/oauth2. Out of privacy concerns and not wanting to create a honey pot for hackers, no e-mail addresses are saved to the db.

Finally, one of the most exciting parts of future.porn, uploads. Again, it's one of those things you need javascript for, and there's a lot of moving parts with multipart uploads, so we're using Uppy uploader widget to handle the uploads. Integrating with Uppy took a lot of work, and there are some annoying corner case bugs that can happen with the upload form, but this is just the beginning and I think it's going to get the job done for now.

We're using Uppy's S3/multipart plugin which gets authorization from our Fastify backend and then gets signed URLs good for uploading the video file chunks directly into our Backblaze B2 S3 compatible bucket. This way, the big uploads don't go through our Fastify server which means the uploads aren't going to bog down our servers.

I've implemented a simple moderation workflow. Vods are created by patrons, mods, and admins. The uploader can upload a single vod file, or a bunch of vod segments. After uploading, the uploader confirms the order of the segments. A moderator can then view the segments, and approve or reject the upload. If approved, the VOD appears on the VOD page. The backend task processor concatenates the segments, generates a thumbnail, creates a HLS playlist, and IPFS cid.

What comes next?

Lots of fixes.

We're looking at a buggy 2.0 right now. There were lots of struggles to get the site launched on the 15th. I'm two days late and finding out a bunch of issues that aren't working correctly in production environment. It'll take some time to get them fixed.

Every week I want to improve on the 2.0 system. More features, more functionality. This is a system I look forward to working with, because it's a joy to work with. future.porn (2.0) is one Fastify system that I can comprehend without a headache, make changes easily and deploy quickly. 2.0 has got it's own flaws, but at the system level it's far less complicated than 1.0, and that's a step in the right direction.

Streams

Streams is something I'll be working on soon. I think the streams page might have a confusing name. It's not that streamers will be able to livestream on future.porn. No, the streams page is just a catalog of streams that have happened. In software development, naming things is hard, but it's the best thing I could come up with. Streams consist of Vods, Vods consist of Uploads, Uploads consist of Segments.

Streams will be a mostly automated page, where R18 vtuber streams announced on Twitter/other SNS/etc. get added to the list. With that Streams list populated, uploaders can then relate their uploads to specific streams, which will then contain a nice list of all the vods recorded for that specific stream. In other words, the Streams page will be the best place to check for a Vod recording, because you will see all the Vods that were recorded by the community.

Tags and timestamps.

Omg more trauma. I think this will be the fourth time I've implemented tags and timestamps, but you know what? This time will be better then ever, because I've implemented tags and timestamps four times before!

Toys list.

I'm being real honest here, I'm planning on adding affiliate links to the upcoming toys list, because I am barely surviving and I need to raise money. I hope it's win-win though, since future.porn will list all the toys your favorite H-streamer has, and you can get a link to where to buy that same toy.

Toy playback sync via buttplug.js.

It's been almost 5 years of this promise going unfulfilled. Everyone say it with me, "For fuck's sake CJ, I want to vibe already! 🤣" I'm making it happen this year.

More download and replication options

A big part of Future.porn's vision is projecting Lewdtuber history far into the future. I know there is risk involved with putting thousands of vods in one central place, which is why it's important that everyone interested in what's on Futureporn make a copy of what is on Futureporn. Copied content lasts longer. Copy it to Floppy, Betamax and HDDVD and.. wait, what are those formats? I have no idea, but luckily we still have JPEG. Wait, that one is prone to cascading degradation? Oh shit, maybe we should find a better format.

The point I'm trying to make is that there isn't one foolproof method that is going to last forever. There are only formats that last for a time, and after that time passes, it's important to migrate the data to the new format. So this is an ongoing challenge and right now it seems that torrents are the best method to use to get the files on as many HDDs/SSDs as possible. It's widely used and easy to use. For that reason, torrents are the next planned download option.

Putting 1.0 on it's death bed

1.0 (futureporn.net) has too many system components. It's a fragmented, unintelligible, layered complexity, unopinionated, hacked together mish-mosh with bloated project requirements held together with glue and string. It's a disaster zone and I can't look at it without dying inside. I'm letting it go to waste so 2.0 can grow.

We're taking it slow-- 1.0 is not going away for awhile. The new 2.0 site is pre-alpha, work-in-progress preview at this point, and it's going to crash and burn a few times before it's stable. That's okay, and it's a process that's going to take a few months. 1.0 and 2.0 will co-exist for now. All I'm saying right now is be prepared for 1.0 to stop existing at some point. When exactly? When 2.0 is better than 1.0. I'm tracking the milestones to make that happen at https://gitea.futureporn.net/futureporn/fp/milestone/1

VOD, Stream Comments

We've all got something to say or something to ask, and there's no better place to ask it than on the VOD itself.

Vod Upvotes

As the site gains the capability of multiple vods per stream, the need arises to differentiate between Vods. Say one archivist captured the vod, but missed the first hour. Another archivist captured the vod, but missed a 15 minute section in the middle. A third archivist captured the vod in it's entirety. We want all vods to remain present, but naturally the best vod with the most votes bubbles to the top.

Transcription/ Automatic Speech Recognition (ASR)

It's a common thing to see reddit posts where people are trying to find a VOD which contained a specific thing. It could be a sexy scene or a unique story that they heard about through the grapevine, and want to hear the original event. With audio transcriptions and a good search function, this feature would help people find exact timestamps of what they're looking for.

2d/3d Model Index

This feature idea is a copy of https://www.ironmousemodelindex.com/ which is a great website put together by a person I look up to, https://www.patreon.com/c/thegyroscopictree. Basically the idea is to put together a page for each lewdtuber where each of their models is showcased, with information on the concept artists, modellers, and riggers who made it a reality.

Upcoming challenges

Bringing 2.0 into feature parity with 1.0

Lots of Vods need migrated, lots of features need implemented. One day at a time, we'll get this done.

Continuing without burnout.

I'm a workaholic and all I ever want to do is work. This is great for focus, but bad for balance and vitality. Having gone through the build/burnout cycle a few times, I'm starting to recognize when burnout is creeping up days in advance. The signs are existential dread, and feelings of wanting to escape. The cure is to stop working for a time, and switch focus to different things that spark joy. I'm going to do this more, and there will be periods of time when I'm only doing the bare minimum to keeping the site online. I hope you will be patient with me during those times.

Thank you

As always, thanks for your support of this project. Your support helps me keep learning, building, and refining something weird and beautiful. Let’s keep making Futureporn real, and together we can create the Galaxy's Best VTuber Hentai site.

Comments

Honestly, seeing this update gives me a good feeling about the future. It seems like you getting a grasp of a doable vision and I believe you can get is to a status that is usuable and will give you the opportunity to grow to a team and not only be a one-person show. Thanks for still giving hope and stay safe/healthy.

EyIdontknow


More Creators