{"id":29542461,"url":"https://github.com/maybebyte/flask-patient-registration-demo","last_synced_at":"2026-04-09T11:03:31.232Z","repository":{"id":303851764,"uuid":"1016881923","full_name":"maybebyte/flask-patient-registration-demo","owner":"maybebyte","description":"Full-stack Flask/Python/HTML/CSS/Jinja2 learning project. Patient registration web application demo with SQLite database, pico.css, and form validation.","archived":false,"fork":false,"pushed_at":"2025-07-09T19:56:00.000Z","size":74,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-10T04:54:49.983Z","etag":null,"topics":["css","database","demo","flask","form-validation","forms","full-stack","html","jinja2","learning-project","patient-registration","picocss","python","sqlite","validation","web-app","web-application","web-development","webapp"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maybebyte.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-09T17:09:28.000Z","updated_at":"2025-07-09T19:56:04.000Z","dependencies_parsed_at":"2025-07-10T03:46:06.996Z","dependency_job_id":"e9fae0d5-6f23-4eb4-ab47-eb553fa7e7b4","html_url":"https://github.com/maybebyte/flask-patient-registration-demo","commit_stats":null,"previous_names":["maybebyte/flask_clinic_app","maybebyte/flask-patient-registration"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maybebyte/flask-patient-registration-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maybebyte%2Fflask-patient-registration-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maybebyte%2Fflask-patient-registration-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maybebyte%2Fflask-patient-registration-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maybebyte%2Fflask-patient-registration-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maybebyte","download_url":"https://codeload.github.com/maybebyte/flask-patient-registration-demo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maybebyte%2Fflask-patient-registration-demo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265598324,"owners_count":23795312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["css","database","demo","flask","form-validation","forms","full-stack","html","jinja2","learning-project","patient-registration","picocss","python","sqlite","validation","web-app","web-application","web-development","webapp"],"created_at":"2025-07-17T11:02:41.205Z","updated_at":"2025-12-30T22:07:10.388Z","avatar_url":"https://github.com/maybebyte.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Flask patient registration demo\n\n## Table of contents\n\n\u003c!-- mtoc-start --\u003e\n\n- [Screenshots](#screenshots)\n- [Features](#features)\n- [Overview](#overview)\n- [Running the app](#running-the-app)\n- [Considerations for production](#considerations-for-production)\n\n\u003c!-- mtoc-end --\u003e\n\n## Screenshots\n\n![Patient Registration form with dark background. Form contains four input fields: Patient First Name filled with 'John', Patient Last Name filled with 'Smith', Date of Birth filled with '01/01/2001', and Therapist Name filled with 'Jane Smith'. A blue Submit button appears at the bottom.](./screenshots/patient_registration-dark.png)\n![Patient Registration form with light background. Same form layout as previous image with identical information: John Smith, date of birth 01/01/2001, therapist Jane Smith, and blue Submit button](./screenshots/patient_registration-light.png)\n![Success page with dark background displaying 'You have successfully registered the patient' as main heading. Below shows review text and submitted information: First Name: John, Last Name: Smith, Date of Birth: 2001-01-01, Therapist Name: Jane Smith. Blue 'Register another patient' link appears at bottom.](./screenshots/successfully_registered_patient-dark.png)\n![Success page with light background showing identical content to previous success page: registration confirmation heading, submitted patient information for John Smith, and 'Register another patient' link.](./screenshots/successfully_registered_patient-light.png)\n\n## Features\n\n- Patient registration form with validation.\n- Structured Query Language (SQL) database support with SQLite.\n- Confirmation page with entered data.\n- Responsive and minimal browser styling with\n  [pico.css](https://github.com/picocss/pico).\n\n## Overview\n\nThis Flask code demonstrates full-stack app development skills.\n\nThe app permits a user to enter data into a form. The data includes:\n\n- Patient's first name\n- Patient's last name\n- Patient's date of birth\n- Therapist name\n\nOnce the user enters the data and sends the POST request to the\n`/submit` endpoint, the app validates the form data. The client-side\nchecks that the user populated all the forms with data, and that the\ndate of birth precedes the current date. Since a tool like Burp Suite\ncan turn off client-side validation, the server performs these checks as\nwell.\n\nAfter the app validates the data, it writes it to a SQLite database.\nThen the app redirects to a confirmation page. The confirmation page\ndisplays the entered data and a link to add another patient.\n\n## Running the app\n\nInstall Python if not already present, along with the `pip` package\nmanager. Then perform these steps.\n\n1. Create a virtual environment to confine package installation to\n   this project.\n\n```shell\n$ python3 -m venv venv\n```\n\n2. Activate the virtual environment. You must choose the appropriate\n   activation file for the interactive shell you use. This examples uses\n   the `fish` shell's activation file.\n\n```shell\n$ . venv/bin/activate.fish\n```\n\n3. Install required packages.\n\n```shell\n$ pip install -r requirements.txt\n```\n\n4. Run the app.\n\n```shell\n$ flask --app app run\n * Serving Flask app 'app'\n * Debug mode: off\nWARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.\n * Running on http://127.0.0.1:5000\nPress CTRL+C to quit\n\n```\n\n5. Use your browser to visit the Uniform Resource Locator (URL) printed\n   in Flask's output.\n\n```shell\n$ firefox http://127.0.0.1:5000\n```\n\n6. Once you finish viewing the demo, remember to exit the virtual environment.\n\n```shell\n$ deactivate\n```\n\n## Considerations for production\n\nAs this code represents a proof of concept, it lacks many safeguards and\nfeatures expected in production. Some examples include:\n\n- Stricter validation logic (for example: a character allowlist and\n  enforced formats).\n- Sandboxing.\n- Production Web Server Gateway Interface (WSGI) server instead of the\n  built-in Flask server. Flask explicitly warns not to use the built-in\n  server for production.\n- HyperText Transport Protocol Secure (HTTPS) support. [See Request For\n  Comments (RFC) 9325](https://datatracker.ietf.org/doc/rfc9325) for more\n  details on secure configuration.\n- Patient management kept behind a login, and therapists can only manage\n  their own patients.\n- Fine-grained access controls with a robust security model from the\n  start.\n- Secure deployment on a server that meets Health Insurance\n  Portability and Accountability Act (HIPAA) requirements.\n- A different database with both encryption at rest and concurrent write\n  capabilities, such as PostgreSQL.\n- The code initializes the database at the module level---not a good\n  practice, but it works for a basic demo.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaybebyte%2Fflask-patient-registration-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaybebyte%2Fflask-patient-registration-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaybebyte%2Fflask-patient-registration-demo/lists"}