Skip to content
/ FormSG Public
forked from opengovsg/FormSG

Form builder for the Singapore Government. Added a small PR as a way of giving back since I used this project to learn best practices with TypeScript: https://github.com/opengovsg/FormSG/pull/2819

License

Notifications You must be signed in to change notification settings

tehtea/FormSG

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FormSG

Build Status Coverage Status

Table of Contents

Features

FormSG is a form builder application built, open sourced and maintained by the Open Government Products team of the Singapore Government Technology Agency to digitise paper processes.

Notable features include:

  • 19 different form field types, including attachments, tables, email and mobile
  • Verified email and mobile phone fields via integrations with Twilio and AWS SES
  • Automatic emailing of submissions for forms built with Email Mode
  • End-to-end encryption for forms built with Storage Mode
  • (Singapore government agencies only) Citizen authentication with SingPass
  • (Singapore government agencies only) Corporate authentication with CorpPass
  • (Singapore government agencies only) Automatic prefill of verified data with MyInfo
  • (beta) Webhooks functionality via the FormSG JavaScript SDK.

The current product roadmap includes:

  • (in progress) Frontend rewrite from AngularJS to React
  • Enabling payments on forms
  • Electronic signatures
  • Notifications to form admins for Storage mode submissions
  • Integration with vault.gov.sg

Local Development (Docker)

Prerequisites

Install docker and docker-compose.

Running Locally

Run the following shell command to build the Docker image from scratch. This will usually take 10 or so minutes.

npm run dev

After the Docker image has finished building, the application can be accessed at localhost:5000.

If there have been no dependency changes in package.json or changes in the src/app/server.ts file, you can run

docker-compose up

which does not rebuild the Docker image from scratch. This command usually only takes ~15 seconds to finish starting up the image.

Accessing email locally

We use MailDev to access emails in the development environment. The MailDev UI can be accessed at localhost:1080 when the Docker container is running.

Environment variables

Docker-compose looks at various places for environment variables to inject into the containers. The following is the order of priority:

  • Compose file
  • Shell environment variables
  • Environment file
  • Dockerfile

FormSG requires some environment variables in order to function. More information about the required environment variables can be seen in DEPLOYMENT_SETUP.md.

We provide a .template-env file with the secrets blanked out. You can copy and paste the variables described into a self-created .env file, replacing the required values with your own.

Trouble-shooting

You can consult TROUBLESHOOTING.md for common issues that developers face and how to resolve them.

Testing

The docker environment has not been configured to run tests. Thus, you will need to follow the following local build guide to get tests running locally.

Testing Prerequisites

The team uses macOS for development.

Make you sure have the following node version & package manager on your machine:

  • "node": ">=14.17.0"
  • "npm": ">=6.0.0"
  • "mongo": ">=4.0.0"

Run

nvm install 14
npm install
pip install "localstack[full]"

to install node modules and Localstack locally to be able to run tests. Note that localstack[full] is only compatible with Python 3.7 and above.

Running tests

Unit tests

npm run test

will build the backend and run both our backend and frontend unit tests. The tests are located at tests/unit/frontend and tests/unit/backend.

If the backend is already built, you can run

npm run test-ci

End-to-end tests

npm run test-e2e

will build both the frontend and backend then run our end-to-end tests. The tests are located at tests/end-to-end. You will need to stop the Docker dev container to be able to run the end-to-end tests.

If you do not need to rebuild the frontend and backend, you can run

npm run test-e2e-ci

Architecture

An overview of the architecture can be found here.

MongoDB Scripts

Scripts for common tasks in MongoDB can be found here.

Contributing

We welcome all contributions, bug reports, bug fixes, documentation improvements, enhancements, and ideas to code open sourced by the Government Technology Agency of Singapore. Contributors should read CONTRIBUTING.md and will also be asked to sign a Contributor License Agreement (CLA) in order to ensure that everybody is free to use their contributions.

Support

Please contact FormSG ([email protected]) for any details.

Acknowledgements

FormSG acknowledges the work done by Arielle Baldwynn to build and maintain TellForm, on which FormSG is based.

Contributions have also been made by:
@RyanAngJY
@jeantanzy
@pregnantboy
@namnguyen08
@zioul123
@JoelWee
@limli
@tankevan

About

Form builder for the Singapore Government. Added a small PR as a way of giving back since I used this project to learn best practices with TypeScript: https://github.com/opengovsg/FormSG/pull/2819

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 73.5%
  • JavaScript 13.4%
  • HTML 8.4%
  • CSS 4.7%