Hello Kirby community,
I am currently looking for a CMS to build a subscription-based course booking website like kidpass. I am wondering whether Kirby is the right CMS for it. There are a few requirements:
- During sign up, user can choose for a basic plan ( which gives them 4 credits per month) or a family plan (6 credits per month).
- Users can use these credits to book a certain number of activities.
- Users can log in to the website to edit their information, see their bookings or cancel the booking (from the front end)
- Booking statistics and data will be shown to administrators, either on front-end (ideal) or in the Kirby panel. Data can be exported to excel or csv (tabular data)
I am wondering if Kirby CMS will allow me to do all these? And if yes, what are the parts of the Kirby documentation that I should look out for?
Welcome to the forum. You can provide logins on the front-end easy enough. How you handle the user editing is largely up to you, but know that while Kirby is flat file first, you can connect to a database. You can roll your own edit screen behind a log in via custom PHP to manipulate the user data in the DB. This plugin is probably useful here.
For the subscriptions stuff, I’d pass this off to something like Snipcart which will also handle payments. You should checkout Snipcart’s documentation on that though, thats a feature I have yet to use. You can skin the cart to look like your website easy enough. They supply a sass theme for this.
I think you can certainly do this with Kirby.
Thanks for the quick reply. I am hoping not to touch databases as I’m not very confident in it, unfortunately! For the subscription function, I do not need the payment function for now.
I am just wondering how I can actually store data and show it on the front end with Kirby. For example, if a user uses 1 credit to book an activity with only 4 slots, the system will automatically deduct the user’s current credits and display it on his profile page; the available slots for the activity will also be automatically reduced to 3 slots and once reached 0, closed for applications.
I can’t seem to find anything in the documentation that guides me to do this, as well as to create multiple booking forms for multiple activities/events that will be present on the website.
Well you can define custom blue prints against a custom user role to store the credits they have. However, I don’t know how you would update that from the front end. Perhaps someone else can help there.
For the booking forms, this is dead easy with Uniform.
You could store the users signups on a secret page, but I don’t how secure that is, since you could technically hit it in a browser and see sensitive information (GDPR strikes again!). I would at least wrap that page in code that means it only displays if an admin user is logged it.
A rough guide to setting up bookings / newsletter registrations is here, but please, do whatever you can to protect the data thats been entered, in accordance with your countries laws.
You probably want to add the information to a structure field. You can read back the credits they have. How many users are we talking about here?
On a side note, you should probably not enable Kirbys cache with all this, since it will cache an inaccurate credit count that wont update until the cache is updated.
This cookbook recipe should give you can idea how to create pages (or structure fields) from forms on the frontend. If you want to create users as pages, the $page API and pages API with methods like create, update, delete etc. are what you want to check. out.
Instead of creating pages, you can also create user accounts with or without Panel access and then use permissions on the frontend to limit access to certain pieces of information.
The user API provides all the necessary methods for creating, updating, logging in, logging out or checking on user roles and permissions.
If you store your subscribers as users with no Panel access and want to display their information on the frontend, I’d create a generic user page template, and then use routes to show the information for individual users.