MilkShelf

How MilkShelf Works

A complete guide for farmers

What's in this guide

1. The Big Picture 2. Herdshare Mode 3. How Customers Sign Up 4. Your Daily Workflow 5. Pickup Days & Capacity 6. Pickup Schedule 7. Excess Jars 8. The Waitlist 9. Jar Return Tracking 10. Managing Customers 11. Emails & Reminders 12. Branding Your Portal 13. QR Code Flyer 14. Labels 15. Vacations & Pauses 16. Collecting Payments 17. Your Payments Tab
🌾 The Big Picture

MilkShelf gives your farm a custom signup page at yourfarm.milkshelf.com β€” this is your farm's permanent public link. Share it anywhere: your website, Facebook, a text message, or a QR code flyer on your fridge. Customers use it to subscribe, manage their subscription, and check for extra jars. You get a private dashboard to manage everything β€” orders, labels, capacity, emails, and more.

Here's the basic flow:

1
Customer visits your link They enter their phone number, pick a day, choose how many jars, and subscribe.
↓
2
They get a confirmation email Branded with your logo, showing their pickup day and jar count.
↓
3
They get pickup reminders Automatic emails the night before (or morning of) their pickup day.
↓
4
You check your dashboard See today's orders, print labels, post any extra jars.

MilkShelf includes built-in card billing through Stripe. Customers enter a card when they sign up and are charged automatically on their pickup day β€” no chasing payments, no Venmo requests. You always net your full jar price; a small processing fee is passed to the customer. If a customer prefers to pay cash, that option is available too and their pickups are tracked the same way.

πŸ„ Herdshare Mode

If your farm operates as a herdshare, flip the Herdshare Mode toggle in Settings before doing anything else. It swaps the language MilkShelf uses across your dashboard, customer page, and every automatic email β€” customers become shareholders, jars become shares, pickups become distributions, subscriptions become herdshare agreements. It also unlocks the billing modes and pricing fields specific to herdshares.

Turning it on

Go to Settings β†’ Farm Settings β†’ Herdshare Mode and flip the toggle. The terminology change happens immediately, everywhere, without redoing any setup.

Billing modes

With Herdshare Mode on, the Payments tab unlocks two billing modes designed for share-based farms, alongside the per-pickup mode:

Monthly Herdshare β€” bills every shareholder a flat monthly charge on the same day of the month. You pick the day (1st through 28th). Distribution day is separate from billing day, so a shareholder can pick up on Wednesdays but be billed on the 1st.

4-Week Herdshare β€” bills every 4 weeks starting from each shareholder's first distribution. Keeps everyone on a steady 28-day cycle but staggered across the month.

Monthly price per share

Instead of price-per-jar, set a flat monthly (or 4-week) rate per share in Settings β†’ Pricing & Deposits. This is what's shown to shareholders on your portal and what they're charged each billing cycle.

One-time buy-in fee

Many herdshares charge a one-time fee per share at signup. Set the amount in Settings β†’ Pricing & Deposits β†’ One-Time Shareholder Fee Per Share. New shareholders pay it during their signup checkout, on top of their first monthly charge. Leave it at zero if you don't charge a buy-in.

Existing shareholders who already paid the buy-in

When you manually add a shareholder who paid their buy-in directly before joining MilkShelf, check the "Shareholder buy-in already collected" box on the add-customer form. They won't be charged again. The same option appears on the customer-facing signup form, so a shareholder signing themselves up can flag it β€” you'll get an email about it so you can verify before they're confirmed.

Jars per share

If one share isn't one physical jar β€” say a share is a gallon, filled as two half-gallon jars β€” set Jars Per Share to 2 in Settings β†’ Pricing & Deposits. Shareholders see their share count on the portal; you see the physical jar count on labels, pickup lists, and capacity counts.

Dashboard β†’ Settings β†’ Farm Settings (toggle), Pricing & Deposits, Payments tab (billing mode)

πŸ“± How Customers Sign Up

When someone visits your link, here's what they see:

Phone number entry

They enter their phone number first. If they've signed up before, their info is pre-filled so they can make changes. If they're new, a blank form appears.

Pick a day and jars

They choose a pickup day from your active days and select how many jars. Days that are full show as "(FULL)" and can't be selected. The jar dropdown adjusts based on what's available that day.

Pickup frequency

They choose weekly or every two weeks. For biweekly customers, the system automatically manages scheduling to keep your weekly milk demand consistent β€” see below.

Biweekly pairing (every two weeks)

When a biweekly customer signs up, the system checks whether your existing biweekly customers are balanced. If they are, the new customer gets free choice of day and start date. If there's an unpaired customer, the system assigns the new customer to that customer's off week β€” so you always fill the same number of jars every week, regardless of who's biweekly. The new customer sees a note explaining why their day was pre-selected. If it doesn't work for them, they're directed to contact you directly. Jar counts are matched to the unpaired customer's jar count to keep things even.

If you'd rather let biweekly customers pick whatever day and start date they want β€” even if it leaves your weekly demand uneven β€” turn off the Auto-pair Every-2-Week Customers toggle in Settings β†’ Pickup Days & Capacity.

Reminder preference

They choose when to get pickup reminders β€” the night before at 6 PM, the morning of at 8 AM, or no reminders.

πŸ’‘ Returning customers can come back anytime, enter their phone number, and update their day, jars, frequency, or status. They don't need a separate login.
β˜€οΈ Your Daily Workflow

Your dashboard has five tabs across the top β€” Today, Customers, Schedule, Settings, and Payments. The Today tab is your morning routine β€” everything you need to fill jars and get them out the door:

Today's Orders

Shows every active customer picking up today, their jar count, and any notes. Customers on vacation are automatically hidden. The total jar count is shown in the header.

Labels

Pick a collection date and tap "Generate Labels" to create labels for any pickup day. Labels download as a PDF ready to print on a standard thermal label printer. Each label shows the customer name, jar count, farm URL, and collection date. Vacation customers are automatically excluded.

Excess Jars

Filled more jars than you have orders? Post the extra count here. Customers visiting your portal see a banner: "3 extra jars available today β€” help yourself while they last!" You can customize this message and it shows a timestamp so customers know it's fresh.

Jar Returns

When a customer picks up their milk, all their jars are assumed to be out. Open the Jar Returns accordion, tap any jar circle to mark it 🟒 when it comes back, then tap Save. Jars still out show as 🟠.

If a customer has more than 2Γ— their jar subscription outstanding before their next pickup, MilkShelf automatically sends them a reminder email β€” and sends you a summary so you know who to expect jars from.

Use the day dropdown to switch between pickup days. Jar tracking can be turned on or off with the toggle in the Jar Returns header.

πŸ’‘ Typical morning: Open dashboard β†’ check today's orders β†’ print labels β†’ fill jars β†’ post any extras β†’ check jar returns. Takes about 2 minutes.
πŸ“… Pickup Days & Capacity

You control which days you offer pickup and how many jars are available each day. Only the days you check will appear on your customer portal β€” if you only do Wednesday and Saturday, those are the only options customers see.

Setting up days

Check the box next to each day you offer pickup and enter the jar limit. For example: Wednesday β†’ 20 jars, Saturday β†’ 30 jars. Unchecked days are hidden from customers.

How capacity works

As customers sign up for a day, the available count goes down. When a day hits zero, it shows as "(FULL)" on the signup form and new customers can't select it. If someone cancels or pauses, that capacity opens back up automatically.

Jar size

Set what "one jar" means for your farm β€” half gallon, quart, gallon, etc. This shows on the signup form as "One jar is a half gallon" so customers know what they're ordering.

Jar price

Enter what you charge per jar. This shows on your customer portal so customers know what to expect before signing up, and is included in their welcome email when they subscribe.

Jar deposit

If you charge a deposit for jar returns, enter the amount here. It shows alongside your jar price on the portal. The deposit is the incentive that keeps jars coming back β€” jar return tracking helps you see exactly who still has jars out so you know where your deposits stand.

Dashboard β†’ Settings tab β†’ Pickup Days & Capacity, and Pricing & Deposits

πŸ—“ Pickup Schedule

The Schedule tab gives you a 4-week forward view of all your pickup days β€” so you can see at a glance how full each day is, which customers are coming, and where you have open slots.

Where to find it

Open your dashboard and tap the Schedule tab. It loads automatically from your current customer and capacity data β€” no setup needed beyond configuring your pickup days in Settings.

How to read it

Each pickup day appears as a card showing the date, how many jars are expected out of your capacity, and a fill bar. Green-bordered cards have open slots β€” meaning off-week or vacationing customers have freed up space. Orange-bordered cards are full. Today's pickup is highlighted with a "TODAY" badge.

Seeing who's coming

Tap any day card to expand the full customer list for that pickup, including jar counts and pickup frequency. Customers who are off that week (biweekly schedule) or on vacation are shown as tags below the card so you know exactly why a slot opened up.

πŸ₯› Excess Jars

When you have extra milk beyond your regular subscriptions, enter the available quantity in your MilkShelf dashboard. A banner automatically appears on your customer portal showing how many extra jars are available, with a timestamp so customers know it's current.

How it works

Enter the number of extra jars and optionally customize the message. When you set it to 0, customers see "No extras today β€” check back tomorrow!" so they don't have to ask. If you haven't customized the message, the banner just hides when the count is 0. This is great for days when you have more milk than usual or when customers are on vacation and you have surplus.

Dashboard β†’ Today β†’ Excess Jars

⏳ The Waitlist

Instead of turning new customers away when you're full, you can enable a waitlist with a single toggle in your dashboard. Once on, customers visiting your signup page will see a "Join Waitlist" button. Here's how it works:

1
Customer joins the waitlist They enter their info and how many jars they want. They get a priority number based on when they joined.
↓
2
Capacity opens up When a customer pauses, cancels, or reduces their order, jars become available.
↓
3
Automatic offer sent The first person on the waitlist gets an email with a time-limited offer to claim the spot.
↓
4
They accept or it cascades If they accept, they become a subscriber. If they don't respond in time, the offer moves to the next person.
Waitlist Manager

From your dashboard, you can view the waitlist, reorder priorities, and remove people. The whole cascade process is automatic β€” you don't have to manage it.

Dashboard β†’ Customers β†’ Waitlist

πŸ₯› Jar Return Tracking

Keep track of how many jars each customer has at home. Open the Jar Returns accordion on your dashboard, tap the circles as you load your dishwasher each night, and hit Save. Takes about 30 seconds.

Nightly tap-to-log

Today's pickup customers are listed with one circle per jar. Orange means the jar is still at the customer's place. Tap it to mark it returned (green). Switch days with the dropdown to catch up on any day you missed.

Automatic reminders

If a customer has more than twice their subscription jar count outstanding, MilkShelf automatically sends them a friendly reminder the day before their next pickup. You get a summary email too so you know who to expect jars from.

πŸ’‘ Nothing breaks if you skip a night. The jar counts just stay where they were. The deposit is still holding either way β€” tracking is for your visibility, not a hard system lock.

Dashboard β†’ Today β†’ Jar Returns

πŸ‘₯ Managing Customers
Search & pause/activate

Look up any customer by name or phone number. From the search results you can pause, reactivate, or delete their subscription. Paused customers don't count toward your capacity and don't receive pickup reminders.

Manually add a customer

For customers who can't use the online form (or prefer not to), you can add them directly from the dashboard. Enter their name, phone, email, pickup day, frequency, and jar count.

Customer notes & private farmer notes

Every customer has two notes fields. Customer Notes is anything the customer wrote on their own signup ("Special instructions, preferences, etc.") β€” they can see and edit this on the portal. πŸ”’ Private Farmer Notes is yours alone, with a yellow background so you can't mix them up β€” customers never see it and are never notified when you change it. Use it for payment notes, jar deposit status, delivery preferences, or anything else. Both fields appear on Today's Orders and Upcoming Orders so the relevant info is always in front of you on pickup day.

Download customer list

Export your full customer list as a CSV file. Useful for your own records or for importing into other tools.

πŸ’‘ If a customer wants to change their day or jar count, they can do it themselves on your portal by entering their phone number. You don't need to do it for them β€” that's the whole point of having the portal.

Dashboard β†’ Customers tab

πŸ“§ Emails & Reminders

MilkShelf sends emails on your behalf, branded with your farm logo. You don't have to write or send anything β€” it's all automatic.

Confirmation email

Sent immediately when a customer signs up or updates their subscription. Shows their pickup day, jar count, frequency, and a link to your Google Maps directions. You can add a custom message that appears in this email (e.g., "Milk is available starting at 7am. Please bring your own cooler bag.").

Pickup reminders

Sent automatically before each pickup day. Customers choose whether they want the reminder the night before at 6 PM, the morning of at 8 AM, or no reminders. You can customize the reminder text and use placeholders like {customerName}, {pickupDay}, and {jars}.

Mass email

Need to tell your customers something? Write a subject and message and send to everyone, a specific pickup day, your waitlist, or a custom group. Great for holiday closures, schedule changes, or seasonal updates.

Test emails

Send yourself test versions of the confirmation, update, and reminder emails to see exactly what your customers will receive before you go live.

Capacity alerts

If your subscriptions exceed your capacity on any day, you get a daily alert email at 8 AM showing which days are over and by how many jars.

Dashboard β†’ Settings β†’ Email Settings

🎨 Branding Your Portal

Your customer portal at yourfarm.milkshelf.com looks and feels like your farm, not like generic software.

Farm logo

Upload your logo and it appears on the customer portal and in every email. PNG with a transparent background works best. If you don't have a transparent version, the dashboard links to a free tool to remove the background.

Pickup location map

Upload a screenshot or photo showing exactly where customers should pick up. This shows on the customer portal below the signup form.

Pickup address & directions

Enter your full address and customers get a "Directions to Our Farm" link that opens in Google Maps with turn-by-turn navigation.

Farmer message

Post a message that appears on your customer portal. Useful for seasonal notes, holiday hours, or anything you want customers to see when they visit your page.

Contact form

Customers can send you a message directly from the portal if they have questions or special requests. The message goes straight to your email.

Payment link

Connect Stripe to collect payments automatically β€” customers are billed at signup and on a recurring schedule without any manual follow-up. Prefer to handle payments yourself? You can also add a link to Venmo, Square, or another payment page as a fallback.

Dashboard β†’ Settings β†’ Farm Settings

πŸ“² QR Code Flyer

MilkShelf generates a printable flyer with a QR code that links directly to your customer portal. Print it and tape it anywhere customers will see it β€” your farm fridge, barn door, cooler, or pickup area.

How it works

Customers scan the QR code with their phone and it takes them straight to your signup page. No typing, no searching β€” just scan and subscribe. It's the fastest way to get new customers signed up on the spot.

πŸ’‘ Pro tip: Print a few and put one at every pickup location. Customers who find out about your farm through word of mouth can sign themselves up before they even leave.

Dashboard β†’ Settings β†’ QR Code Flyer

🏷️ Labels

Generate jar labels for any pickup day in seconds. Labels are designed to print on standard thermal label printers and include everything your customers need to identify their order.

What's on a label

Each label shows the customer's name, jar count, your farm URL, and the collection date. Customers on vacation are automatically excluded so you never print a label for someone who isn't picking up.

Printing

Labels download as a PDF formatted for thermal label printers. Open the PDF and print directly β€” no resizing needed. If you don't have a thermal printer, the PDF works on regular paper too and can be cut apart.

πŸ’‘ Print for tomorrow too. You can generate labels for any date, so if you like to prep the night before, just pick tomorrow's date and print ahead.

Dashboard β†’ Today β†’ Labels

πŸ–οΈ Vacations & Pauses
Farm vacation (you're the one going away)

Going to a family reunion, conference, or just taking a week off? Set a Farm Vacation window in Settings β†’ Farm Vacation. The night before your vacation starts, MilkShelf emails every active customer to let them know there'll be no pickups during the window β€” with a personal message from you if you wrote one β€” and automatically pauses every card customer's Stripe subscription so nobody is charged for weeks they aren't getting milk. The night your vacation ends, everything resumes: subscriptions un-pause, reminders restart, and your next pickup day runs as normal.

Biweekly customers whose off-week falls during your vacation are handled correctly β€” they won't get a duplicate "vacation" email or a Stripe pause they didn't need. Customers who are already on their own personal vacation through your absence are left alone so they don't get unpaused prematurely.

Customer vacations

Customers can set vacation dates on the portal. During their vacation, they're automatically excluded from today's orders and don't receive pickup reminders. Their subscription stays active β€” they just skip those weeks. When the vacation ends, everything resumes automatically.

Pausing a subscription

Customers can pause their subscription from the portal, or you can pause them from the dashboard using Search Customer. Paused customers don't count toward your capacity and don't get reminders. They can reactivate anytime.

πŸ’³ Collecting Payments
How it works

MilkShelf can collect jar payments directly from your customers via card. When you connect your bank account in the Payments tab, customers see a "Card" or "Cash" option when they sign up. Card customers are charged automatically on whatever schedule you choose β€” no invoicing, no chasing payments.

You always receive your full jar price

When a customer pays by card, processing fees (Stripe's ~2.9% + $0.30, plus MilkShelf's 1.5%) are added on top of your jar price at checkout β€” you never see a deduction. For example, if your jar is $8.00, the customer pays $8.69. You receive $8.00 every time, deposited directly to your bank account.

Three billing modes

Set how customers are charged in Payments β†’ Billing Mode:

Per Pickup β€” billed every pickup day, weekly or biweekly. Best for direct-sale farms where the charge ties to a physical pickup.

Monthly Herdshare β€” a flat per-share charge on the same day each month (1st through 28th). Unlocks when Herdshare Mode is on.

4-Week Herdshare β€” bills every 4 weeks from each shareholder's first distribution. Keeps shareholders on a steady 28-day cycle.

Per-pickup billing is tied to pickup day

On per-pickup billing, customers are charged on their first pickup day, then on the same day every week (or every two weeks for biweekly customers). If someone signs up Monday for a Thursday pickup, their first charge is that Thursday β€” not Monday. This keeps billing and pickups in sync.

Example: Jane signs up Monday March 16th for a Thursday pickup. Her first charge hits Thursday March 19th. After that she's charged every Thursday β€” March 26th, April 2nd, and so on.

Customers manage their own card

Card customers see a "Manage Card Payments" button on your portal. It opens Stripe's billing portal where they can update their card, view past charges, and download receipts β€” without involving you. You never see their card details, and they never have to call to fix a declined card.

Failed payments

When a charge fails (expired card, insufficient funds, etc.), a red banner appears at the top of your Today tab listing the affected customers. Stripe automatically retries the charge over the next several days. If a customer pays you another way in the meantime β€” cash at pickup, Venmo, anything β€” click "Mark as Paid" on the banner to clear the flag. The customer also shows an orange "Past due" badge in Search Customers results until resolved.

Letting customers switch to cash on their own

In Payments β†’ Customer Billing Options there's a toggle: "Allow Customers to Switch to Cash." When on, card customers can cancel their card billing themselves from the portal and switch to paying you directly. Turn it off if you only want card customers and don't want self-serve downgrades.

Vacations & pauses

When a card customer sets vacation dates, their Stripe subscription is automatically paused on their vacation start date and resumes on their first pickup day after vacation ends β€” so they're never charged for a week they're skipping. When you pause a customer from the dashboard, their subscription pauses immediately and resumes when you reactivate them.

Example: Sarah picks up every Thursday. She sets a vacation from June 5th to June 12th. Her June 5th and June 12th charges are skipped automatically. Her subscription resumes June 19th β€” her first Thursday after vacation ends β€” with no action needed from you or Sarah.

Cash customers

Cash is always an option. Customers who choose cash at signup are handled exactly as before β€” no Stripe involved, no change to your current workflow. You collect payment however you normally do.

Unpaid customers

If a customer starts the card signup process but doesn't complete checkout, they show up in the Payments tab as "Unpaid." You can resend them a payment link or follow up directly. They'll also show an orange "Unpaid" badge in the Search Customer results.

Connecting your bank account

Go to the Payments tab in your dashboard and click "Connect Bank Account." Stripe will walk you through a quick setup β€” you'll need your routing and account number. Once connected, your status shows "Payments Active" and customers will see the card option at signup.

πŸ“ˆ Your Payments Tab

The Payments tab is mission control for everything money-related: who's paid, who hasn't, what's coming in, and how customers are billed. You only need to spend time here if you're using MilkShelf for card billing.

Unpaid Customers

Customers who started signup but didn't complete card checkout show up here. Each row has a "Resend Payment Link" button so you can nudge them, or you can delete the entry if they're not coming through.

Projected Income

Pick a time window β€” 7 days, 14, 30, 60, 90, 180, a full year, or any custom range β€” and MilkShelf calculates your expected revenue across all active customers based on their current subscriptions and pickup schedules. Cash projections assume customers pick up as scheduled. Useful for planning, taxes, or deciding whether to raise prices.

Upcoming Charges

A live view from Stripe of every card customer with a charge due in the next 14 days. Shows the amount, the date, and the customer. Click "Load Upcoming Charges" to refresh.

Billing Mode

Pick how card customers are charged: Per Pickup, Monthly Herdshare, or 4-Week Herdshare. See the previous section for what each one does. Monthly Herdshare asks you to set a Billing Anchor Day (1–28) β€” the day of the month all shareholders are billed.

Customer Billing Options

One toggle: "Allow Customers to Switch to Cash." When on, card customers can cancel their own card billing from the portal and pay you directly. When off, they have to contact you to switch.

Collect Payments (Stripe Connect)

The "Connect Bank Account" button launches Stripe Express onboarding. You'll enter your business details, routing and account number, and verify your identity β€” all through Stripe's hosted flow. Once finished, your status flips to "Payments Active" and customers see the card option at signup. Money is deposited directly to your bank by Stripe; MilkShelf never touches it.

Dashboard β†’ Payments tab

πŸ’¬

Still have questions?

We're happy to help. Whether you need help getting set up or just want to talk through how it works β€” reach out anytime!

Send Us a Message