Background

Over the past 16 years, CVWO has served numerous community-serving clients all over Singapore, and we have no intention of stopping there. In the future, we expect to support many more clients in their mission to serve the community better.

However, creating a new system every time a new client comes on board is neither easy nor scalable. Not only does it become challenging to manage the codebase and deployment for each client, but it also becomes increasingly difficult to keep track of these systems, especially if the number of clients we serve in the future grows to a point where manual management is no longer feasible.

To address these challenges, we have initiated Project Cornerstone this year. The primary objective of this project is to establish a resilient platform that accommodates our current applications in a modular structure using componentization. This platform will also enable us to develop new applications with tailored features for new clients much faster than before. Furthermore, we aim to expedite the modeling of the business model for the future system by utilizing custom objects, allowing for a significantly faster development process.

Starting this year, our team is also serving We Love Learning Center (WeLL), whom we recently onboarded. Established in 2003, WeLL is a volunteer-led community that provides educational and enrichment programs to children from low-income families.

Our main focus in this project is on two key areas: componentization and custom objects.

Componentization

Module Management and Configuration

In each client’s system, we’ve observed both similarities and differences in the features they are using. This has led us to modularize these features. Our aim in modularizing these features is to facilitate faster system development for future clients. This can be achieved by enabling or disabling specific modules, depending on their unique requirements.

These modules are organized in a hierarchical structure to simplify their management as a package. For instance, in our current setup, the AAC Administration module has several dependencies, including AAC Befriending and Buddying and AAC Reports. This structure allows us to tailor the configuration for each client. For example, if a client only needs the Reports feature and not Befriending and Buddying, we can disable the latter while keeping the former. Similarly, if a client doesn’t require the AAC Administration module at all and prefers a non-AAC module, we can disable the entire AAC Administration module, consequently deactivating all its dependent modules.

Furthermore, it’s common for clients to have specific preferences for the details of the features they require. For example, within the AAC Reports module, some clients may only need attendance information for all participants, including volunteers, while others may not require volunteer attendance data. To address this, we provide the flexibility to configure the modules they choose to use, aligning them with the clients’ needs. In the module configuration page, clients can activate specific components while leaving others inactive, as illustrated below.


After determining the set of features through Module Management, we arrange the order in which these features appear on the tenant’s sidebar based on client requirements. The image below illustrates the appearance of the sidebar from the tenant’s page (left) and the sidebar management page (right).

On the sidebar management page, we have the flexibility to customize the order of features within the tenant’s sidebar to align with the client’s needs. This includes rearranging feature order, grouping features into folders, moving features out of folders to make them standalone, and hiding/unhiding specific features on the tenant’s page.


Custom Objects

In this project, we also have the vision to empower each client to define their own data models more easily and rapidly, thereby enhancing their business workflows and insights. To achieve this vision, we have introduced Custom Objects, which offer clients the flexibility to model data according to their specific business requirements.


Custom Object Management

When creating a Custom Object, users begin by specifying the entity’s names in both singular and plural forms. For example, if a client wants to gather data about families enrolled in their center, they might create a Custom Object named ‘Family,’ with ‘family’ as the singular form and ‘families’ as the plural form.

To further configure this Custom Object, users can add fields according to their specific information requirements. Each field has its own type, including Datetime, Text, Number, Checkbox, Selection, or other data types. The field settings vary depending on their assigned type. For example, the ‘Occupation’ field is assigned the ‘Selection’ type, enabling users to edit the available options. Subsequently, when another user creates a record for this specific Custom Object, they can fill in the ‘Occupation’ field based on the options set earlier.

This can be accomplished in two ways:

  • Users can manually input all the fields they wish to include in the Custom Object using our ‘New Custom Object Fields’ feature.
  • Alternatively, they can import a correctly formatted JSON file into our system, and the system will intelligently recognize and create the Custom Object, including all its fields and properties.

Additionally, we provide settings for the ‘Child Object,’ which is another Custom Object. This establishes a ‘has-many’ relationship between Custom Objects. In the following example, we assigned ‘Caregiver’ as one of the Child Objects of the ‘Family’ Custom Object because the client wants to assign volunteers to each family as needed.

Custom Object Records

Once we have finished configuring the Custom Object ‘Families’ and arranged it within the Sidebar Management system, it becomes accessible on the tenant page. Depending on the fields we have included in this object, the corresponding information will be displayed on the Records page.

Custom Object Table and Permission

Additionally, we offer further customization for this Custom Object, including filtering and permissions to align with the client’s requirements. In the List View tab, you can set up the columns displayed on the main page and specify which field is used for filtering. Within the Permission tab, you can configure CRUD abilities for each user, based on their assigned role. Furthermore, in the Field Level Permission section, you can customize the Read and Update abilities for each field and user, depending on their role.


Project Team

  • Jonathan Mulyawan Woenardi (Project Lead, Alumnus)
  • Alicia Michelle Wang (Developer, Year 2)
  • Bivan Alzacky Harmanto (Developer, Alumnus)
  • Brandon Lau Koon Chun (Developer, Year 1)
  • Lam Cheng Hou (Developer, Year 1)
  • Muhammad Fikri (Developer, Year 1)
  • Tan Jing Sheng (Developer, Year 1)


Afterthoughts

Such an awesome experience to be given the opportunity to give back to CVWO. Not only was I able to contribute once more for the meaningful cause, but also the training CVWO provides will prepare me better for my future roles.

– Jonathan

Immensely grateful for the opportunity given to join CVWO and serve the community with very talented individuals! The experience has taught me beyond technical skills and I have seen myself grown so much in a short period of time.

– Alicia

Through CVWO, I’ve gone through the entire Software Engineering cycle, from planning and design to implementation and final execution of software systems. I’m immensely grateful for the opportunity to enhance my engineering skills and make a meaningful impact on society.

– Bivan

CVWO has been a great learning experience and the projects we were involved in were interesting and eye-opening. I’m grateful to have been given the opportunity to work towards such a meaningful cause with such talented people!

– Brandon

CVWO has been a very fruitful experience, where I learnt to build meaningful products that positively impact society. I had the unique opportunity to plan out and build my own fullstack features for production. Not only did I gain software engineering capabilities, but also friendships and great memories!

– Cheng Hou

CVWO has allowed me to contribute to a meaningful cause greater than self. Through this experience, I had the opportunity to hone my skills in the context of creating actual impact on the community.

– Fikri

CVWO is more than an internship. The challenges at CVWO were like puzzles waiting to be solved, and each solution brought about a positive change. Every day presented a fresh opportunity to learn and contribute. Amazing way to spend the summer :D

– Jing Sheng

We would like to express our heartfelt gratitude to the following people who have been influential and supportive during our project:

  • GIC for their generous support for the programme.
  • Prof Ben Leong (NUS) for his patient guidance.
  • Ko Yang, Xin Hui, Angel (WeLL Staff) for their cooperation and support throughout the project.