Skip to content

rootvc/wootvc

Repository files navigation

wootvc

woot! VC

Configuring drops

Add new products by editing data/deals.json. Each product is an object in the deals array. Images go in /public folder.

Product Configuration Fields

Each product in deals.json requires the following fields:

Required Fields

date (string, required)

  • The date when this product becomes available (format: YYYY-MM-DD)
  • Only deals with dates in the past or today will be shown as the "current drop"
  • Example: "2026-01-13"

title (string, required)

  • The product name displayed on the main page
  • Example: "Simple Sabotage Field Manual"

heroImageURL (string, required)

  • Path to the main product image (stored in /public folder)
  • Must start with /
  • Example: "/simple-sabotage.png"

price (string, required)

  • Product price in dollars (without the $ symbol)
  • Example: "10" or "25.99"

shipping (string, required)

  • Shipping cost. Use "Free" for free shipping, or a number for paid shipping
  • Example: "Free" or "5" or "12.50"

condition (string, required)

  • Product condition description
  • Example: "New" or "Used" or "Like New"

products (string, required)

  • Description of what's included in the purchase
  • Example: "1 Simple Sabotage Field Manual" or "1 Book + 1 Sticker"

checkoutUrl (string, required)

  • Stripe checkout link where customers purchase the product
  • Example: "https://buy.stripe.com/9B600lehRgch3ZAfSZ2ZO00"

productInfoHeader (string, required)

  • The headline text shown in the "Product Info" tab
  • Example: "Defend your organization against sabotage!"

body1 (string, required)

  • First paragraph of product description (supports HTML)
  • This appears before the tweet embed (if present)
  • Example: "The Simple Sabotage Field Manual, created in 1944 by the Office of Strategic Services..."

body2 (string, required)

  • Second paragraph of product description (supports HTML)
  • This appears after the tweet embed (if present)
  • Example: "This version has been manually re-typeset from the original..."

productStats (string, required)

  • Product specifications displayed in the "Product Stats" tab
  • Must use HTML <dl>, <dt>, and <dd> tags
  • Format: <dl><dt>Label</dt><dd>Value</dd><dt>Label2</dt><dd>Value2</dd></dl>
  • Example: "<dl><dt>Weight</dt><dd>56.6g</dd><dt>Dimensions</dt><dd>4.5\" x 7.5\"</dd></dl>"

shareTitle (string, required)

  • Title used when sharing the product on social media (Open Graph)
  • Example: "Simple Sabotage Manual - Woot! VC by Root VC"

shareDescription (string, required)

  • Description used when sharing the product on social media (Open Graph)
  • Example: "A professional guide to accomplishing absolutely nothing..."

shareImageURL (string, required)

  • Path to the image used when sharing on social media (stored in /public folder)
  • Must start with /
  • Recommended size: 1200x630px for best results
  • Example: "/simple-sabotage-share.png"

Optional Fields

bodyTweetCode (string, optional)

  • HTML code for a Twitter/X tweet embed
  • If provided, the tweet will appear between body1 and body2
  • To get the embed code:
    1. Go to https://iframely.com/domains/x-formely-twitter
    2. Paste the tweet URL
    3. Copy the HTML code from the result
  • Example: "<p lang=\"en\" dir=\"ltr\">Tweet text here...</p>&mdash; Username (@handle) <a href=\"...\">Date</a>"

donations (string, optional)

  • Information about where proceeds are donated (supports HTML)
  • If provided, appears after body2
  • Example: "All proceeds will be donated to the <a href='https://www.exploratorium.edu/'>Exploratorium</a> in San Francisco."

Example Product Configuration

{
  "deals": [
    {
      "date": "2026-01-13",
      "title": "Simple Sabotage Field Manual",
      "heroImageURL": "/simple-sabotage.png",
      "price": "10",
      "shipping": "Free",
      "condition": "New",
      "products": "1 Simple Sabotage Field Manual",
      "checkoutUrl": "https://buy.stripe.com/9B600lehRgch3ZAfSZ2ZO00",
      "productInfoHeader": "Defend your organization against sabotage!",
      "body1": "The Simple Sabotage Field Manual, created in 1944...",
      "body2": "This version has been manually re-typeset...",
      "bodyTweetCode": "<p lang=\"en\" dir=\"ltr\">Tweet content...</p>&mdash; User (@handle) <a href=\"...\">Date</a>",
      "donations": "All proceeds will be donated to the <a href='https://example.com'>Organization</a>.",
      "productStats": "<dl><dt>Weight</dt><dd>56.6g</dd><dt>Dimensions</dt><dd>4.5\" x 7.5\"</dd></dl>",
      "shareTitle": "Simple Sabotage Manual - Woot! VC by Root VC",
      "shareDescription": "A professional guide to accomplishing absolutely nothing...",
      "shareImageURL": "/simple-sabotage-share.png"
    }
  ]
}

Required Image Files

For each product, you'll need to add 2 image files to the /public folder:

  1. Hero Image (heroImageURL)

    • The main product image displayed on the homepage
    • Recommended size: 700x700px or larger (square format works best)
    • File location: /public/your-product-name.png
    • Example: /public/simple-sabotage.png
  2. Share Image (shareImageURL)

    • The image shown when the product is shared on social media (Twitter, Facebook, etc.)
    • Recommended size: 1200x630px (Open Graph standard)
    • File location: /public/your-product-name-share.png
    • Example: /public/simple-sabotage-share.png

How to add images:

  1. Create or download your image files
  2. Name them appropriately (e.g., my-product.png and my-product-share.png)
  3. Place both files in the /public folder at the root of the project
  4. Reference them in your JSON config with paths starting with / (e.g., "/my-product.png")

Setting Up Stripe Checkout

Before adding a product, you need to create a checkout link in Stripe:

  1. Log into Stripe Dashboard

  2. Create a Payment Link

    • Navigate to Products in the left sidebar
    • Click + Add product (or select an existing product)
    • Fill in product details:
      • Name: Your product name
      • Description: Optional product description
      • Pricing: Set your price
    • Click Save product
  3. Get the Checkout URL

    • After creating/selecting the product, click ... (three dots) next to the product
    • Select Create payment link or View payment links
    • Copy the Checkout URL (it will look like: https://buy.stripe.com/...)
    • This is what you'll use for the checkoutUrl field in your JSON config

Alternative: Create a Payment Link directly

  • Go to Payment Links in the left sidebar
  • Click + Create payment link
  • Configure your product and pricing
  • Copy the generated checkout URL

Important: Make sure the price in Stripe matches the price field in your JSON config!

Helpful Tools

Important Notes

  1. JSON Formatting: Make sure your JSON is valid (no trailing commas, proper quotes, etc.)
  2. Image Paths: All image paths must start with / and reference files in the /public folder
  3. HTML in Text Fields: Fields like body1, body2, donations, and productStats support HTML. Use single quotes for attributes: <a href='https://example.com'>link</a>
  4. Date Logic: Only deals with dates in the past or today will appear as the "current drop". Future dates won't show until that date arrives.
  5. Multiple Products: If you have more than 1 product, the "past drops" tab will automatically appear in the navigation.

Running the app

npm run dev

About

woot! VC

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages