One of the major features WooCommerce offers is license key distribution via plugins. These allow you to generate and deliver unique serials per transaction. But Jekyll has no backend or database — so how can you implement this in a fully static architecture?
Surprisingly, it's possible using a combination of GitHub Actions, Zapier or Make, and external license banks. This allows you to deliver unique codes post-purchase without needing a traditional server.
Option 1: Use Google Sheets + Zapier to Send Unique Keys
Here’s a serverless way to do it using Google Sheets as a license bank:
- Create a Google Sheet with a list of pre-generated license codes.
- Set up a column to track whether each code has been sent (e.g.
used = TRUE
). - Configure a Zap in Zapier or Make.com to watch your Stripe or Gumroad sale events.
- When a sale is confirmed, the Zap looks for the first unused code, marks it as used, and sends it via email.
You can personalize the email using fields from your form and Zapier’s templating tools. This setup is fully serverless and cheap (or free in limited usage).
Option 2: GitHub Actions to Serve Custom License Post Payment
If you host your licenses in a private GitHub repo, you can automate delivery with GitHub Actions:
- Create a JSON or CSV file with license keys in your private repo.
- Use GitHub Actions triggered by webhooks (e.g. Stripe, PayPal) to:
- Pick an unused key
- Mark it as sent
- Send a transactional email using a service like SendGrid or Mailgun
This requires some scripting in JavaScript or Python, but you avoid SaaS tools and keep control inside GitHub.
Option 3: Self-Serve License Lookup Pages (Manual Fulfillment)
If automation isn’t needed at scale, offer a lookup page for customers who paid. Example workflow:
- After purchase (Stripe, Ko-fi, Gumroad), customer gets a unique ID or order number.
- They visit a
/lookup/
page on your site. - They input their order ID, and a small embedded JS fetches a license from a static JSON (or Airtable via API).
This solution works best for low volume stores or beta testing environments.
Where Do You Store License Keys for Static Sites?
Several options depending on your trust model and privacy needs:
- Google Sheets — easiest to manage, with Zapier/Make integration
- Notion Database — works well with Make for automation
- GitHub Private Repo — use Actions to assign and update licenses
- Airtable — combines form logic + APIs in a low-code setup
Bonus: Pre-Embed the Key into Downloaded File
For digital goods like software or templates, you can personalize the file itself with the user’s key before they download it. Here's how:
- User submits a purchase form with email + payment
- Zapier adds a unique license to a copy of the downloadable file (e.g. injects into metadata)
- Zapier then hosts the file temporarily via Dropbox or Google Drive and emails the customer a private link
This approach offers a personalized experience and discourages casual sharing.
What About License Validation Without Backend?
Since you don’t have a database or login system, license validation must be done client-side. One common way is:
- Bundle a local JS validator with the product that checks the format or checksum of the license
- Periodically validate against a public JSON license manifest (read-only)
For example, a JS script in your template can validate a license key format using regex and cross-check a limited list of expired or banned keys pulled from a static JSON file hosted on your site.
What to Avoid When Sending Static License Keys
- Never hardcode a license bank directly in your public Jekyll repo
- Don't expose unclaimed keys in any public JSON, HTML, or JS
- Avoid full automation if your volume is low — sometimes semi-manual is safer and easier
Summary: Static Stores Can Deliver Dynamic Licenses
Even without a CMS or server, you can build a license delivery system for Jekyll sites by combining:
- External automation tools like Zapier or Make
- Public or private databases like Sheets or GitHub
- Email services (Mailgun, SendGrid)
Whether you're selling software, digital art, fonts, or courses — you can handle license delivery reliably using a JAMstack approach that doesn’t require WordPress or WooCommerce plugins.
Comments
Post a Comment