+
+
+
+
diff --git a/src/components/StripeButton.astro b/src/components/StripeButton.astro
new file mode 100644
index 0000000..4778c82
--- /dev/null
+++ b/src/components/StripeButton.astro
@@ -0,0 +1,52 @@
+---
+import { SiApplepay, SiGooglepay } from "react-icons/si";
+
+import { SlCreditCard } from "react-icons/sl";
+
+const getLinkForQuantity = (quantity: number) => {
+ switch (quantity) {
+ case 3:
+ return "https://buy.stripe.com/aEUdU57TyfI872oaEK";
+ case 8:
+ return "https://buy.stripe.com/bIY9DP5Lq53ucmIaEN";
+ case 25:
+ return "https://buy.stripe.com/28obLX0r69jKcmI6oy";
+ case 15:
+ return "https://buy.stripe.com/8wM5nz0r653u2M814c";
+ default:
+ throw new Error("Invalid payment amount");
+ }
+};
+interface Props {
+ quantity: number;
+}
+const { quantity } = Astro.props;
+---
+
+
+
+
+ Pay with Stripe
+
+
+
diff --git a/src/components/SupportTierCard.astro b/src/components/SupportTierCard.astro
new file mode 100644
index 0000000..b60165a
--- /dev/null
+++ b/src/components/SupportTierCard.astro
@@ -0,0 +1,191 @@
+---
+import { SlClose } from "react-icons/sl";
+import type { TierType } from "./TiersDisplay.astro";
+import StripeButton from "./StripeButton.astro";
+import { Image } from "astro:assets";
+import type { ImageMetadata } from "astro";
+
+type Props = TierType;
+
+const { dollarsPerMonth, imageUrl, tagline, perks, name } = Astro.props;
+const id = name.replaceAll(" ", "-");
+
+const images = import.meta.glob<{ default: ImageMetadata }>(
+ "/src/images/support-us/*.{jpeg,jpg,png,gif}",
+);
+if (!images[imageUrl])
+ throw new Error(
+ `"${imageUrl}" does not exist in glob: "/src/images/support-us/*.{jpeg,jpg,png,gif}"`,
+ );
+---
+
+
diff --git a/src/components/TiersDisplay.astro b/src/components/TiersDisplay.astro
new file mode 100644
index 0000000..2e9173c
--- /dev/null
+++ b/src/components/TiersDisplay.astro
@@ -0,0 +1,125 @@
+---
+import SupportTierCard from "./SupportTierCard.astro";
+
+export type TierType = {
+ name: string;
+ imageUrl: string;
+ dollarsPerMonth: number;
+ tagline: string;
+ perks: { description: string }[];
+};
+
+const TIERS: TierType[] = [
+ {
+ name: "a nice egg",
+ dollarsPerMonth: 3,
+ tagline: "Can you offer me a nice egg in this high-inflation time?",
+ imageUrl: "/src/images/support-us/egg.png",
+ perks: [
+ {
+ description:
+ "Support my work on a more open, more decentralized, and (above all) more fun web",
+ },
+
+ {
+ description:
+ "Help me bring more underrepresented people into coding and open source",
+ },
+ {
+ description:
+ "Ensure the creation of more fandom-oriented Ethical Chaos™",
+ },
+ {
+ description: "Access to $upporters-only posts, polls, streams and code",
+ },
+ {
+ description: "Periodic discounts on merch",
+ },
+ ],
+ },
+ {
+ name: "specialty coffee & boba",
+ dollarsPerMonth: 8,
+ imageUrl: "/src/images/support-us/coffee-and-boba.png",
+ tagline: "I mean, it's a latte, Michael. What could it cost?",
+ perks: [
+ {
+ description: "All previous perks, plus...",
+ },
+ {
+ description: "Comments on $upporters-only posts",
+ },
+ {
+ description: "Send in priority questions for Q&A days",
+ },
+ {
+ description: "Alpha access to unreleased sites and services",
+ },
+ ],
+ },
+ {
+ name: "almond butter toast",
+ dollarsPerMonth: 15,
+ imageUrl: "/src/images/support-us/almond-toast.png",
+ tagline: "Frankly, my dear, I don't like avocado.",
+ perks: [
+ {
+ description: "All previous perks, plus...",
+ },
+ {
+ description: `Second-wave "dibs" on releases of limited-edition or discounted, one-off merchandise`,
+ },
+ {
+ description:
+ "Feature your blorbo on the $ponsors blorbos wall (upcoming)",
+ },
+ {
+ description: `Even deeper "Behind the Scenes" access to early-release screenshots and documents`,
+ },
+ ],
+ },
+ {
+ name: "subsidized massage",
+ dollarsPerMonth: 25,
+ imageUrl: "/src/images/support-us/massage.png",
+ tagline: `"It's like one of my Silicon Valley start ups!"`,
+ perks: [
+ {
+ description: "All previous perks, plus...",
+ },
+ {
+ description: `Priority "dibs" on releases of limited-edition or discounted, one-off merchandise`,
+ },
+ {
+ description:
+ "Feature your blorbo on the $ponsors blorbos wall (upcoming), but bigger",
+ },
+ {
+ description:
+ "Support Ms Boba's continued health by adding $3/month to her massage fund",
+ },
+ ],
+ },
+];
+---
+
+
+
+
+
diff --git a/src/content/config.ts b/src/content/config.ts
index 6869e65..f388eda 100644
--- a/src/content/config.ts
+++ b/src/content/config.ts
@@ -5,6 +5,15 @@ import { collection as imagesCollection } from "./images/_config.ts";
import { collection as sponsorsCollection } from "./sponsors/_config.ts";
import { updates } from "./updates/_config.ts";
+import { defineCollection, z } from "astro:content";
+
+const FaqSchema = z.object({
+ title: z.string(),
+ order: z.number(),
+ draft: z.boolean().optional(),
+ success: z.boolean().default(false),
+});
+
export const collections = {
team: teamCollection,
updates,
@@ -12,4 +21,8 @@ export const collections = {
projects: projectsCollection,
images: imagesCollection,
sponsors: sponsorsCollection,
+ faqs: defineCollection({
+ type: "content",
+ schema: FaqSchema,
+ }),
};
diff --git a/src/content/faqs/bobaboard-subscription.md b/src/content/faqs/bobaboard-subscription.md
new file mode 100644
index 0000000..42657bb
--- /dev/null
+++ b/src/content/faqs/bobaboard-subscription.md
@@ -0,0 +1,17 @@
+---
+title: Can't I just support you by buying a premium BobaBoard account?
+order: 1000
+---
+
+
+ While BobaBoard is the main project I work on, I work on a lot more
+ than BobaBoard. It's important that I continue doing so for the
+ long-term success of our goals.
+
+
+ Even more importantly, there are many reasons why tying my ability to
+ survive to the success of the social software I build is a bad, bad
+ idea. While this might end up being its own blog post at some point,
+ for now I ask you trust me: if you want to see more of what I do,
+ please donate to me directly.
+
diff --git a/src/content/faqs/cancelling.md b/src/content/faqs/cancelling.md
new file mode 100644
index 0000000..d67ddeb
--- /dev/null
+++ b/src/content/faqs/cancelling.md
@@ -0,0 +1,11 @@
+---
+title: How do I cancel?
+order: 700
+success: true
+---
+
+You can log in to your PayPal account to manage all your
+subscriptions. For Stripe, [click here](https://billing.stripe.com/p/login/7sI9E470ibQt0A8dQQ) for the customer portal.
+
+In case of any issue, contact me at any time at
+essential.randomn3ss@gmail.com.
diff --git a/src/content/faqs/favorite-support.md b/src/content/faqs/favorite-support.md
new file mode 100644
index 0000000..a776c5c
--- /dev/null
+++ b/src/content/faqs/favorite-support.md
@@ -0,0 +1,8 @@
+---
+title: Which support mode do you prefer?
+order: 500
+---
+
+If you love (moderate) adventure, joining my attempt at [a self-hosted support
+tool](#donate) is very appreciated. Alternatively,
+[Patreon](https://www.patreon.com/essentialrandomness) is a very popular option.
diff --git a/src/content/faqs/icons-design.md b/src/content/faqs/icons-design.md
new file mode 100644
index 0000000..a6ff83e
--- /dev/null
+++ b/src/content/faqs/icons-design.md
@@ -0,0 +1,7 @@
+---
+title: Who designed these beautiful icons?
+order: 1100
+---
+
+My amazing friend SKUMSUCK
+generously created them for me.
diff --git a/src/content/faqs/not-working.md b/src/content/faqs/not-working.md
new file mode 100644
index 0000000..f62d514
--- /dev/null
+++ b/src/content/faqs/not-working.md
@@ -0,0 +1,14 @@
+---
+title: Help! Something isn't working!
+order: 850
+success: true
+---
+
+Thanks for letting me know. This is a very experimental page, and
+things might break unexpectedly. Please do let me know what went wrong
+by contacting me at
+essential.randomn3ss@gmail.com.
+
+In the meantime you can also donate through
+Patreon or
+Ko-fi.
diff --git a/src/content/faqs/old-plan.md b/src/content/faqs/old-plan.md
new file mode 100644
index 0000000..c9abc96
--- /dev/null
+++ b/src/content/faqs/old-plan.md
@@ -0,0 +1,20 @@
+---
+title: What if I'm currently on the old $5/month plan?
+order: 800
+---
+
+
+ You can keep that, and be automatically enrolled in the "almond
+ butter toast" support tier as a thank you for donating before it
+ was cool.
+
+
+ If you wish to up your amount, you can cancel that subscription and
+ create a new one. As long as it's using the same email, I'll
+ make a note to leave you at least as "almond butter toast",
+ regardless of amount.
+
diff --git a/src/content/faqs/secure-payment.md b/src/content/faqs/secure-payment.md
new file mode 100644
index 0000000..837b45d
--- /dev/null
+++ b/src/content/faqs/secure-payment.md
@@ -0,0 +1,7 @@
+---
+title: Is my payment info secure?
+order: 600
+---
+
+Yes. I'm selling subscriptions through Stripe and PayPal links,
+which means your credit card information never leaves those sites.
diff --git a/src/content/faqs/splitting-your-time.md b/src/content/faqs/splitting-your-time.md
new file mode 100644
index 0000000..23d39a1
--- /dev/null
+++ b/src/content/faqs/splitting-your-time.md
@@ -0,0 +1,25 @@
+---
+title: How are you splitting your time these days? What am I supporting?
+order: 100
+---
+
+As my [projects page](/projects) hopefully conveys, I work on an ecle
+
+These days (early 2024), I'm proritizing the following projects:
+
+1. **Shipping FujoGuide Volume 0:** not only [a succesful
+ Kickstarter](https://www.kickstarter.com/projects/essential-randomness/the-fujoshi-guide-to-web-development)
+ deserves a successful delivery, but making Git+GitHub accessible to a new
+ public will redefine who can be building the web of tomorrow
+2. **Secret WIP project:** Not ready to talk about it yet, but it fits nicely
+ with everything else :)
+3. **My Own Worksona:** My professional online presence, including this website.
+ In 2024, I must start bringing in enough money so I can continue empowering
+ myself and others to build towards a better future for the web
+4. **BobaBoard Community Handoff:** [BobaBoard](https://www.bobaboard.com) (the
+ main project I've worked on since 2020) is ready to leave its cozy nest and
+ be embraced by the broader web. To that end, I'm helping transition the
+ project from being led by me to being led by its own community.
+
+Your support buys you early access to news about these projects (and beyond), as well as my
+eternal gratitude. Refer to the tier cards for more info!
diff --git a/src/content/faqs/tos.md b/src/content/faqs/tos.md
new file mode 100644
index 0000000..c148c1a
--- /dev/null
+++ b/src/content/faqs/tos.md
@@ -0,0 +1,6 @@
+---
+title: Are there terms of service for $upporters?
+order: 105
+---
+
+There sure are! Make sure to read them on the [Terms of Service page](/support-us/terms-of-service)!
diff --git a/src/images/support-us/almond-toast.png b/src/images/support-us/almond-toast.png
new file mode 100644
index 0000000..fe7eff9
Binary files /dev/null and b/src/images/support-us/almond-toast.png differ
diff --git a/src/images/support-us/coffee-and-boba.png b/src/images/support-us/coffee-and-boba.png
new file mode 100644
index 0000000..f4a7d30
Binary files /dev/null and b/src/images/support-us/coffee-and-boba.png differ
diff --git a/src/images/support-us/egg.png b/src/images/support-us/egg.png
new file mode 100644
index 0000000..70e67ca
Binary files /dev/null and b/src/images/support-us/egg.png differ
diff --git a/src/images/support-us/header-kofi.png b/src/images/support-us/header-kofi.png
new file mode 100644
index 0000000..19dce6a
Binary files /dev/null and b/src/images/support-us/header-kofi.png differ
diff --git a/src/images/support-us/header.png b/src/images/support-us/header.png
new file mode 100644
index 0000000..9e655a9
Binary files /dev/null and b/src/images/support-us/header.png differ
diff --git a/src/images/support-us/massage.png b/src/images/support-us/massage.png
new file mode 100644
index 0000000..0385503
Binary files /dev/null and b/src/images/support-us/massage.png differ
diff --git a/src/images/support-us/og-image.png b/src/images/support-us/og-image.png
new file mode 100644
index 0000000..2395de6
Binary files /dev/null and b/src/images/support-us/og-image.png differ
diff --git a/src/images/support-us/thenks-suporter.png b/src/images/support-us/thenks-suporter.png
new file mode 100644
index 0000000..70d62dd
Binary files /dev/null and b/src/images/support-us/thenks-suporter.png differ
diff --git a/src/pages/support.astro b/src/pages/support.astro
deleted file mode 100644
index ce3bb9c..0000000
--- a/src/pages/support.astro
+++ /dev/null
@@ -1,39 +0,0 @@
----
-import Layout from "../layouts/Layout.astro";
-import { Image } from "astro:assets";
-import bobawip_color from "../images/bobawip_color.png";
-import backerkit_just_launched from "../images/campaign/backerkit-just-launched.png";
-
-const description =
- "FujoCoded LLC is building a new online storefront to support our projects. Help us build something exciting by backing us on Backerkit!";
----
-
-
-
-
- April 1-10, 2024, we ran a successful BackerKit campaign to raise seed
- money to build our new storefront. Until the store opens, you can help
- support us by supporting our founder on Patreon, Ko-fi, or directly on her website.
-
-
-
-
-
diff --git a/src/pages/support/index.astro b/src/pages/support/index.astro
new file mode 100644
index 0000000..52bf4ce
--- /dev/null
+++ b/src/pages/support/index.astro
@@ -0,0 +1,293 @@
+---
+import Faqs from "../../components/Faqs.astro";
+import TiersDisplay from "../../components/TiersDisplay.astro";
+import Layout from "../../layouts/Layout.astro";
+import { SiPatreon } from "react-icons/si";
+import { SiKofi } from "react-icons/si";
+---
+
+
+
+
Support Us
+
+
+
+
+
What I do (with your support)
+
+ My projects focus on:
+
+
+
+ “A more fun, more social web” for fandom and other niche
+ online communities
+
+
+ Approachable, beginner-to-intermediate technical education targeted at historically marginalized internet dwellers
+
+
+ More accessible open source development, with a
+ focus on open and decentralized technologies
+
+
+
+
+ You can read more about them on the projects page, and support them on
+ Patreon,
+ Ko-fi, or on one
+ of the self-hosted tiers below.
+
+ Sponsorships are custom support tiers for those who wish to make even more of an
+ impact! They can be one-time or ongoing, and they can include custom rewards that
+ are particularly meaningful to you. If you're interested in sponsoring me,
+ please reach out at essential.randomn3ss@gmail.com for next steps!
+
+
+
+
+
+
FAQs
+
+
+
+
+
+
+
+
diff --git a/src/pages/support/success.astro b/src/pages/support/success.astro
new file mode 100644
index 0000000..1fcc283
--- /dev/null
+++ b/src/pages/support/success.astro
@@ -0,0 +1,84 @@
+---
+import Faqs from "../../components/Faqs.astro";
+import Layout from "../../layouts/Layout.astro";
+import thenksSupporterImg from "../../images/support-us/thenks-suporter.png";
+import { Image } from "astro:assets";
+---
+
+
+
+
+
+
+
+
Thank you!
+
+ You will soon receive an email asking you to confirm your subscription
+ to my newsletter. Unless explicitly cancelled (see FAQs), your paid membership will remain active regardless of whether you
+ choose to susbscribe.
+
+
+ The newsletter is the only way to access supporters-only content at
+ this time. I'm working to make the experience more special, and to create a supporters-only
+ area directly on this site. Until then, if you have questions, suggestions,
+ or need help, write me at any time and we'll figure it out together!
+
+
+
+
+
+
+
diff --git a/src/pages/support/terms-of-service.mdx b/src/pages/support/terms-of-service.mdx
new file mode 100644
index 0000000..a71738f
--- /dev/null
+++ b/src/pages/support/terms-of-service.mdx
@@ -0,0 +1,133 @@
+---
+layout: ../../layouts/Layout.astro
+title: "Essential Randomness — Support Me – Terms of Service"
+description: "Terms of service for $upporters!"
+preview: "src/images/support-us/og-image.png"
+---
+
+
+
+# Ms Boba Subscriber TOS
+
+## I. Coverage and Definitions
+
+These terms of service are only applicable to essentialrandomness site, personal
+newsletter, and any events run through the subscription service. By subscribing
+to essentialrandomness, you agree to the terms laid out here. Some services,
+products, and events that are offered through this subscription may utilize
+third party platforms and services. In these cases, you understand that to
+access, utilize, or attend, you will be subject to the terms laid out by the
+platform or service used.
+
+Direct payments on essentialrandomness are handled using
+[Stripe](https://stripe.com/privacy) or
+[Paypal](https://www.paypal.com/us/legalhub/useragreement-full).
+
+Any disputes relating to these services or this agreement are governed under
+California state law.
+
+By subscribing, you consent to receiving emails. See [opt
+out](#iii-opt-out) and [privacy policy](#v-privacy-policy) for
+more information.
+
+These terms are subject to change at any time.
+
+## Definitions
+
+- **Subscriber:** you
+- **Third Party:** Any service or platform not owned or
+ managed by Ms Boba, aka essentialrandomness.
+
+## II. Services
+
+The primary offer here is access to Ms Boba's content and work itself. Through
+subscribing or supporting through other listed means (unless stated otherwise),
+what you receive in return _is_ access to Ms Boba's knowledge and skillset. This
+includes but is not limited to exclusive or non-exclusive access to Ms Boba's
+blogs, newsletters, streams, coding repos, and other digital media. In some (but
+not all) cases, supporters may also receive early or limited access to some
+items. While Ms Boba may offer services, products, and events in return for your
+subscription, there is no guarantee that anything specific will materialize.
+
+Any current offers to subscribers and projects actively being worked on by Ms
+Boba will be available to view on
+[Projects](https://www.essentialrandomness.com/projects) and by reading her
+[Blog](https://www.essentialrandomness.com/posts).
+
+## III. Opt-out
+
+Any purchases made are subject to the terms laid out by the platform the
+purchase was made on.
+
+Subscribers can opt out of services at any time by canceling payment through
+their chosen service. If a service already paid for is not desired, it can be
+opted out by contacting Ms Boba. Ms Boba is not responsible for anything missed
+by the subscriber during the Opt-out periods.
+
+## IV. Non-Payment
+
+Non-payment for services or a lapse in payment can result in subscription
+cancellation. Ms Boba is not responsible for anything missed by the subscriber
+during the non-payment periods.
+
+## V. Privacy Policy
+
+Data collected from subscribers is limited to data collected by the platforms
+that provide payment and subscription services (PayPal, Stripe, Patreon and Ko-fi),
+as well as Buttondown, our newsletter provider.
+
+These may include:
+
+- Names, email addresses, physical addresses
+- Card numbers or banking information (for recurring payments or user profiles)
+- Information tied to accounts on thirds parties used to subscribe and purchase
+ from Ms Boba
+- Orders and transactions history
+
+Ms Boba is not responsible for the management or protection of
+publicly accessible information. The data collected is used only to:
+
+- Fulfill services offered (send emails with what’s offered for the subscription
+ tier)
+- Alert subscriber of changes to service agreements or services offered
+
+### Who can access subscriber data?
+
+- Ms Boba
+- 3rd parties helping Ms Boba with legal compliance (e.g. accountant)
+- Law enforcement, as required by law
+
+Subscriber data may also be accessed by 3rd parties helping Ms Boba with data
+entry and processing, for example to help match subscription data across
+services, or debug issues with automations. In this case, effort will be taken to
+restrict access to the minimum amount of time necessary, and provide as limited
+access as possible.
+
+This privacy policy is only subject to services offered through
+essentialrandomness and does not extend off site or to third party services. The
+subscriber should refer to the off site or third party service’s privacy policy
+when utilizing them. This includes payment processing through
+[Stripe](https://stripe.com/privacy) and
+[Paypal](https://www.paypal.com/us/legalhub/privacy-full).
+
+### How can I delete subscriber data?
+
+To completely delete your subscriber data, you can [contact Ms
+Boba](mailto:essential.randomn3ss@gmail.com). Note that the deletion of
+data will make it impossible to continue accessing services. Once the request
+is received, data will be erased within 30 days.
+
+## VI. Termination of Agreement
+
+You may end your agreement with essentialrandomness at any point through
+canceling your subscription.
+
+Ms Boba reserves the right to cancel your subscription any time at her sole
+discretion.
+
+## VII. Warranty
+
+No warranty is provided and subscribers accept any products, services, or events
+"as is".
+
+
diff --git a/tsconfig.json b/tsconfig.json
index bcbf8b5..2752547 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,3 +1,7 @@
{
- "extends": "astro/tsconfigs/strict"
+ "extends": "astro/tsconfigs/strict",
+ "compilerOptions": {
+ "jsx": "react-jsx",
+ "jsxImportSource": "react"
+ },
}