The subscription site for the Montessori Library was develop to maintain the subscriptions for the access to the material and information provided by the library.
The client approach to us with the need of continue the development of the system and to validate the already implemented code. As a first approach we reviewed the documentation and the requirements sent by the client and validate which one of them were implemented and what was still missing or incomplete. With this report, we provided to the client a plan with the scope to complete all the requirements.
The platform was developed under Laravel 5 and we have integrated Stripe API to process all subscriptions payments. The system allows administrator users to link different products with the subscriptions and their cost having a track of all subscribers matching them with the clients record under Stripe dashboard, where the payment information was stored including the credit card information. Also provides the information on the current subscribers, the current payment status and notifications, besides another reports on the interface for the administrators of the system.
On the received version of the system, it allowed to generate a new subscriber user who would enter the credit card information, select the materials of their interest and allow to subscribe to the material, making the integration with the Stripe system to store the credit card information and the monthly subscription billing cycle.
On subsequent version of the system, we added the ability to cancel the subscriptions, added notifications for each event into the system for the administrator, allowed to change the subscription amount with unsubscription warning to the user, added a lot of new reports and make more improvements on the user interface, making it more accessible for the new subscribers. Also updated all the elements related to the discounts coupons to allow easy use on the subscription workflow.
As the materials for the library are not handled within the subscription system, but managed by an external site implemented on Moodle platform, a new integration was added to allow to the system to create new users, grant access to the courses contents based on the new subscriptions and remove the access when the subscription is canceled or it finishes. This implementation allows to manage multiple Moodle sites at once, giving it more flexibility to have the content sectionalized by subject.
Also, we modified the complete workflow for the subscription allowing to a guest user to subscribe to the course and register as a new subscriber on a new improved 4 step screen, making the need to register and activate the account first as optional. This allows to get more subscribers while making the process more straight forward.
Many improvements where made on the integration with Stripe, because not only are we sending new request for subscription to the API, but also acting based on the callbacks received from the API. In case that a customer cancels the subscription for a course rejecting the subscription on their bank, the Stripe API will send a webhook to the site, and it will react letting the administrator know and revoking the access to the courses content. Also, the system will use the wekhook sent by Stripe to know when a subscription is not been charged correctly each month, letting the subscriber know about it to be fixed.
As all this communication is not done at the same time the user is on the interface, a background task runner was created allowing to perform the different asynchronous task without affecting the user experience and allowing the process to be retried even if the communication with the external services fails. This makes the interface to be more responsive to the user while delegating the heavy and time consuming task to be performed on background by the system.
To have the subscription status visible always, a new block for Moodle was created, that allows to display the current subscription status on the Moodle site itself. This new block retrieves the information from the subscription site and allows to know to the library reader when was the last payment, if some of the subscription have any issue with their payments and the last payment and the status of it.
To have a coherent interface between the sites, the styles of the Wordpress site, subscription site and Moodle instances were make very similar to have a similar user experience on the three different sites. Also, to avoid having multiple passwords for the same user on two different sites, the subscription site and the Moodle site were linked together to allow to the same user account and passwords on both sites. This also includes the ability to auto-login the user on the Moodle platform when enters to the subscription site, making the user experience more comfortable.
As part of the Quality Assurance of the project to ensure there will minimum problems with the subscription system, an automated testing tool called Codeception was integrated to the system allowing to have a way to prevent regressions on the system by validating that the current work flows used by the user continue to work as expected after the changes were added. This is an important element as usually the workflow involves using the Stripe API, the Moodle API and the implemented solution to retrieve the information form the Wordpress site, and all of them must work as expected after a change is done. This way we can validate any issue that may happen between the systems before releasing the change to the production environment.
- Laravel 5: The PHP Framework For Web Artisans based on MVC. We used it for the RESTful API
- MySQL: We defined the database using InnoDB engine for integrity on required tables and MyISAM for faster queries to non-relational tables.
- AngularJS: it has been designed for building web-apps. Include a declarative templates with data-binding, MVC pattern and more awesome features. Using Angular v4
- SCSS: pre-procesador de hojas de estilo CSS