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

Bolt + calendar

Add-to-calendar buttons for your Bolt 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 Bolt 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 Bolt

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

Prompt to paste into Bolt
Add calendar export for bookings that works inside our WebViewGold app. Create a Netlify Function booking-ics and a rewrite in netlify.toml from /calendar/* to /.netlify/functions/booking-ics/:splat with status 200, so links look like /calendar/TOKEN.ics. The function strips .ics from the path, loads the booking by its random ics_token from Supabase using SUPABASE_SERVICE_ROLE_KEY from the Netlify environment, and returns a VCALENDAR with one VEVENT (stable UID, DTSTAMP, DTSTART and DTEND in UTC with Z, SUMMARY, LOCATION, DESCRIPTION with the booking link) as text/calendar; charset=utf-8. Add an ics_token column to bookings. On the confirmation page show Add to calendar in the same tab, never with target blank. When navigator.userAgent contains WebViewGold-Android, also show Add to Google Calendar with a calendar.google.com/calendar/render?action=TEMPLATE link. Never put the service role key in a VITE_ variable.

Great way of converting your web app to a native app! Fast turn-around, and a great way to get your apps into the app stores without the need to develop a full native app!

Kevin Joling · FlightConnections & TrainConnections · Trustpilot

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: Supabase, Firebase or your own API.

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 Bolt 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 Bolt 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 Bolt 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.