Skip to content
WebViewGold Vibe Coding to App Store
English
Get WebViewGold

v0 + calendar

Add-to-calendar buttons for your v0 app

A booking that is not in the user's calendar is a no-show waiting to happen. On iOS, WebViewGold lets users add an event to the Calendar app from a plain link to an .ics file, so your v0 app needs nothing more than a URL that returns the event. Android has no dedicated calendar API in WebViewGold; here is what works there instead.

From $109 one-time per platform, or let our team do it all from $698.

  • Approval guarantee – or money back within 14 days
  • No coding needed
  • One-time payment, free updates
  • 24/7 human support
  • Made in Germany since 2014 · ISO 27001

What works on each platform

iOS: link to an .ics file

WebViewGold is set up for Calendar (formerly iCal): a normal link to an .ics file lets the user add the entry to the iPhone or iPad calendar. No URL scheme, no JavaScript bridge, and the web app never reads the user's calendar; it only offers an event.

Android: download or Google Calendar

The Android documentation has no calendar API. Two routes work: add .ics to downloadableExtension in Config.java so the file is downloaded and can be opened with a calendar app that imports .ics files, and offer an "Add to Google Calendar" link that opens outside the app.

One event file per booking

Your server returns a small text file (a VCALENDAR with one VEVENT) for each booking, class or appointment. The same URL serves the website, the iOS app and the Android download.

Prompt for v0

Paste this into v0 to implement the web-app side. Review the result, publish, then test inside the WebViewGold app.

Prompt to paste into v0
Add an Add to calendar feature that works in the WebViewGold app wrapper. 1) Create app/calendar/[token]/route.ts: strip a trailing .ics from the token, load the booking by its random ics_token and return a VCALENDAR with one VEVENT (UID booking-ID@ourdomain, DTSTAMP, DTSTART and DTEND in UTC ending in Z, SUMMARY, LOCATION, DESCRIPTION with the booking URL, a VALARM one hour before) with Content-Type text/calendar; charset=utf-8 and Cache-Control no-store. 2) Add an ics_token column. 3) On the booking page render a plain link to /calendar/TOKEN.ics in the same tab. 4) In a Client Component, when navigator.userAgent includes WebViewGold-Android, also render Add to Google Calendar with a https://calendar.google.com/calendar/render?action=TEMPLATE link. 5) Attach the same .ics to the confirmation email.

With a good optimized version of your web app you can have a stunning mobile app within a couple of minutes. Additionally to that the customer service is very nice and very helpful! I can just recommend WebViewGold :-)

Julian Koch · Co-Founder of DuelDonkey · CodeCanyon

Add an "Add to calendar" button

About an hour, most of it the .ics endpoint.

  1. Create the .ics endpoint

    Add a route such as /calendar/BOOKING_TOKEN.ics that returns the event with Content-Type: text/calendar; charset=utf-8. Keep the path ending in .ics, as in the WebViewGold example, and use an unguessable token instead of relying on the login session.

  2. Fill in the fields that matter

    A stable UID per booking, DTSTAMP, DTSTART and DTEND in UTC (ending in Z), SUMMARY, LOCATION and a DESCRIPTION with a link back to the booking. Escape commas and semicolons in text.

  3. Link to it in the same tab

    A plain <a href="https://yourdomain.com/calendar/TOKEN.ics">. Do not open it in a new window or with target="_blank"; a web view has nowhere to show one.

  4. Handle Android

    Add .ics to downloadableExtension in Config.java for the download route, and show an "Add to Google Calendar" link with calendar.google.com in BROWSER_BLACKLIST, so it opens in the system browser, where most users are signed in to Google, instead of inside the web view.

  5. Test on real devices

    Add an event on an iPhone, then check the time zone, the duration and the link in the description. On Android, try phones from two manufacturers; calendar apps differ in how they open downloaded .ics files.

A minimal .ics file

This is all a calendar needs. Lines end with CRLF in the iCalendar spec; libraries handle that for you. Server side of your stack: Next.js route handlers and server actions, Postgres via Neon or Supabase.

text
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//YourApp//Bookings//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:20261101T120000Z
DTSTART:20261205T170000Z
DTEND:20261205T180000Z
SUMMARY:Yoga class
LOCATION:Studio 2\, 14 Main Street
DESCRIPTION:Manage your booking: https://yourdomain.com/bookings/123
BEGIN:VALARM
TRIGGER:-PT1H
ACTION:DISPLAY
DESCRIPTION:Yoga class in one hour
END:VALARM
END:VEVENT
END:VCALENDAR

The button logic

The .ics link everywhere, the Google Calendar link as an extra on Android and desktop:

javascript
// Custom user agents: "... WebViewGold-iOS" (Config.swift), "... WebViewGold-Android" (Config.java)
var ua = navigator.userAgent;
var IS_ANDROID_APP = ua.indexOf("WebViewGold-Android") !== -1;
var IS_IOS_APP = ua.indexOf("WebViewGold-iOS") !== -1;

function icsUrl(b) { return "https://yourdomain.com/calendar/" + b.token + ".ics"; }

function googleCalendarUrl(b) {
  var f = function (d) { return d.toISOString().replace(/[-:]|\.\d{3}/g, ""); };
  return "https://calendar.google.com/calendar/render?action=TEMPLATE" +
    "&text=" + encodeURIComponent(b.title) +
    "&dates=" + f(b.start) + "/" + f(b.end) +
    "&details=" + encodeURIComponent(b.url) +
    "&location=" + encodeURIComponent(b.location);
}

// Render: always the .ics link; the Google link unless IS_IOS_APP

Pitfalls

  • Time zones: write times in UTC with a trailing Z, or include a proper VTIMEZONE block. Floating local times shift for travelers and for users in other zones.
  • A new UID on every download can create duplicates. Keep one UID per booking; how a calendar treats a re-import varies by app.
  • Login-protected .ics URLs: the request that fetches the file may not carry the user's web session. A random token per booking is the reliable option.
  • Calendar subscriptions (webcal:// feeds) are a different feature; the WebViewGold docs cover single .ics files.
  • A calendar button is a nice native touch, not a feature that carries an app through review on its own. Combine it with push reminders and deep links back to the booking.

Frequently asked questions

Does WebViewGold have a calendar API for Android?

Not a dedicated one; the calendar integration in the docs is iOS only. On Android, offer the .ics file as a download (add .ics to downloadableExtension in Config.java) and an Add to Google Calendar link that opens outside the app.

Can the app read the user's calendar to check availability?

No. The .ics flow only offers an event that the user adds. Availability belongs on your server, based on your own booking data.

Can I add recurring events or reminders?

Yes, inside the .ics file: an RRULE line for repeating classes and a VALARM block for a reminder. How the reminder appears depends on the user's calendar app; for reminders you control, use push notifications.

How do I generate the .ics file for my v0 app?

A small server route builds the text. For one event no library is needed, though ical-generator (Node) or icalendar (Python) helps with recurring events and escaping. Ask v0 for an endpoint that returns text/calendar for a booking token.

Do calendar links work in the browser too?

Yes. The same .ics URL downloads or opens the event in desktop and mobile browsers, so one button serves the website and both apps.

Three ways to get your app into the stores

Same result, different amount of work on your side. All three come with the approval guarantee and 24/7 human support.

Do it yourself

$109 per platform, one-time

The WebViewGold license: a finished Xcode or Android Studio project. Paste your URL, set name and icon, switch on features, build and submit. Free updates forever.

See plans on the main page

Cloud Builder

$349 per license, one-time add-on

No Mac, no Xcode, no Android Studio: configure in the browser, we build both apps in the cloud and hand them to App Store Connect and the Play Console.

How the Cloud Builder works Try the free demo

Full Service

$698 per platform $798

Send us your URL and icon. Our team configures, builds and delivers your app within 72 hours, white-label, with source projects. Both platforms for $1,158.

Full Service details Powered by WeSetupYourWebViewApp

Winter Sale prices valid until December 31, 2026.

Ready to ship your v0 app?

App Store & Google Play approval guarantee – or your money back within 14 days

Rather hand it over? Full Service: we configure, build and deliver within 72 hours, from $698 per platform. Questions? Chat with us 24/7.

Refunds are granted under the conditions listed in our FAQ: a non-content rejection by Apple and/or Google, claimed within 14 days after purchase.