Now Hiring: PHP/Laravel Web Developer

I’m looking for a PHP developer starting now. Vanilla PHP and Laravel are both welcome.

Update 2020-10-27: I added more details about what I would love to see in your application, and a rough battle plan.

The Work

The goal is to self-host a list of online video courses. The course modules are only available to paying customers.

The technical requirements are roughly this:

  1. User authorization. People should be able to register and log in.
  2. Paywall/user authentication. A part of a website should be walled-off for visitors by default. You will need to log in to your account first, and then you need to have the “has paid for product” flag set in your account, in order to access the online content.
  3. FastSpring (e-commerce) API integration. I don’t want to flip the “has paid” switch manually, at least not forever, so the service will need to be able to provide an API endpoint that can be wired with FastSpring’s webhooks. When an order is completed, the webhook is called, the user is looked up in the system, and her “has paid” switch is flipped. This is for one-time purchases, not perpetual/subscription, so a flipping-off only has to be available for admins (me) in the back or command line. Purchasing first and registering second should be possible, too.

That’s the basics to make everything work. We’ll call this “Iteration 1”.

The FastSpring order callback can fail to associate with registered users (think: different email accounts used, so how do you look up the association?).

To mitigate this, in an “Iteration 2”, a manual way to activate a license would be great. Like “enter this serial number in your account to activate the account”, and this is only possible once for each order.

How I’d assemble this, just to illustrate the point: Every order webhook is consumed and an Order is registered in the system. Then Orders and Users are associated automatically, based on e.g. email matching or an order token (register first, order from the user account settings). Manual matching creates the same association, only through a form in the user account page.

The Outlook

This is the first step to a working course platform.

My ultimate goal is to make this robust, test it in the wild, then expand to also work with e.g. my own macOS apps. But the course comes first.

What I want to say is: if you enjoy doing this, and if you love making tools that help indie developers sell their stuff online, then we can collaborate on this project in the long run. We can discuss my top secret world domination plans pertaining this server backend later. Would love to hear what you think.

Why PHP, of all things?!

I love writing Ruby code. Hosting Ruby/Sinatra or Ruby on Rails apps online is simpler than ever. Python gained traction, too. Node is viable. Swift on the Server is getting more attention every year.

So why PHP?

Because you can upload a directory of PHP files to the server, create a symlink from htdocs to the my_app/public directory, set up the database once, and then you’re ready to roll. “Deployment by FTP” is the simplest form of self-hosting I can imagine. You literally cannot convince me of any Kubernetes/Docker setup for this stuff. It’s impossible :)

I am rather certain the problem is not hard, it’s rather stock-standard, but I cannot spare the weeks to work on this, so I’m looking for a helping hand with the perspective to continue our partnership for future iterations.

The Rough Battle Plan

Update 2020-10-27: After posting all this, I found that there is a Laravel package called laravel-cashier-fastspring. Laravel comes with “Cashier” packages for Paddle and Stripe. So the effort to bring similar features to a FastSpring integration are nice!

It “only” lacks handling single purchases. That’s what I need, though.

Check out my fork’s branch update-deps if you want to be able to intgrate the package in a Laravel test app and see what it does. At least the tests ran after I applied all these changes :)

So my plan of action at the moment is:

  1. Extend the laravel-cashier-fastspring package to add single purchase handling, and bring it to Laravel 8.x standards. (This package might be overkill, but it looks like the community might find this more useful than a home-grown single purpose package, and giving back to the Laravel Open Source community would be nice.)
  2. Write the actual app that uses the package, provides bare-bones user authentication, and paywall the contents.

If you want to apply, please have a look at the laravel-cashier-fastspring package and include your opinion of the package, its current style, and its feasibility for the solution in your email. Do tell me if you think this is a waste of time and money!

Ok, now apply!

I have had great success in the past with applications that included a battle plan. Which packages would you recommend using, and why? How would you limit the scope of the project? What do you think about the laravel-cashier-package and its use for the problem domain? Can you provide (pseude) code sketches for parts of the solution you’d like to implement?

In other words, you have to convince me that you’re interested in the problem and can communicate a plan more than you need to convince me that you’re a capable engineer with years of experience. Although a GitHub account helps so I can see that you really can write PHP, a well-written email that actually tries to provide a solution trumps all.

Get in touch if

  • you are interested in creating a web app for indie devs to make a living,
  • you have experience with the tools and tech involved,
  • you are available “soon”,
  • you can work as a freelancer/contractor,
  • you are able to tackle this problem on your own at your own pace.

Introduce yourself and tell me a bit about you and your work, and feel free to share this with anyone you know! I can read PHP perfectly fine, so please share some of your code if possible.

Oh, and I’m open to suggestions about the way to pay you. One time fixed cost, billing by the week, or whatever. At the moment I would prefer to pay you for the deliverables by the milestone, e.g. for making the laravel-cashier-fastspring package feature complete and bring it up to speed, and then for the app that integrates all.