{"id":30117292,"url":"https://github.com/jeds6391/portfolio-jed-simson","last_synced_at":"2026-04-17T08:02:03.995Z","repository":{"id":39669496,"uuid":"345186852","full_name":"JedS6391/portfolio-jed-simson","owner":"JedS6391","description":"A Python 3 web application built using Flask to serve my portfolio.","archived":false,"fork":false,"pushed_at":"2025-05-14T07:27:55.000Z","size":13950,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-10T10:45:51.254Z","etag":null,"topics":["flask","flask-application","portfolio","python"],"latest_commit_sha":null,"homepage":"https://www.jedsimson.co.nz","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JedS6391.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2021-03-06T20:18:46.000Z","updated_at":"2025-05-14T07:27:59.000Z","dependencies_parsed_at":"2022-07-13T13:30:34.961Z","dependency_job_id":"b8966398-e09f-472d-a5b0-3fc9f50943f1","html_url":"https://github.com/JedS6391/portfolio-jed-simson","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JedS6391/portfolio-jed-simson","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JedS6391%2Fportfolio-jed-simson","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JedS6391%2Fportfolio-jed-simson/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JedS6391%2Fportfolio-jed-simson/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JedS6391%2Fportfolio-jed-simson/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JedS6391","download_url":"https://codeload.github.com/JedS6391/portfolio-jed-simson/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JedS6391%2Fportfolio-jed-simson/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31920518,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["flask","flask-application","portfolio","python"],"created_at":"2025-08-10T10:40:55.887Z","updated_at":"2026-04-17T08:02:03.882Z","avatar_url":"https://github.com/JedS6391.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Portfolio\n\n## About\n\nA Python 3 web application, built using Flask to serve my portfolio.\n\nThe deployed application can be viewed [here](https://www.jedsimson.co.nz/).\n\n### Features\n\n- Landing page\n- About section\n- Project feed\n- Blog\n- Contact form\n\n### Stack\n\n#### App\n\n- [Python 3](https://www.python.org/)\n- [Flask](https://flask.palletsprojects.com/en/2.0.x/)\n- [Halfmoon UI](https://www.gethalfmoon.com/)\n- [Feather Icons](https://feathericons.com/)\n- [SendGrid](https://sendgrid.com/)\n\n#### Deployment\n\n- [gunicorn](https://gunicorn.org/)\n- [Docker](https://www.docker.com/)\n- [Render](https://www.render.com/)\n\n## Development\n\nFollow the instructions below to get started with the app in a local development environment.\n\n### Prerequisites\n\n- [Docker](https://www.docker.com/get-started)\n\n### Running\n\nThe app can be run via `docker` with the following commands:\n\n```console\n# Build image\ndocker build -t portfolio-jed-simson .\n \n# Run in container\ndocker run --env-file=.env -p=8000:5000 portfolio-jed-simson\n```\n\n*Note that an environment file will need to be provided to define the environment variables required by the app. The full list of variables is listed below.*\n\n| Name                      | Description                                                                                                                      | Required           |\n|---------------------------|----------------------------------------------------------------------------------------------------------------------------------|--------------------|\n| `APP_SETTINGS`            | Defines the configuration the app should run with. Supported values are `config.DevelopmentConfig` or `config.ProductionConfig`. | :x:                |\n| `SECRET_KEY`              | Secret key used by some of the app libraries.                                                                                    | :white_check_mark: |\n| `POSTS_PATH`              | Path used to load blog posts from. Default value is `static/assets/posts/`.                                                      | :x:                |\n| `POSTS_PER_PAGE`          | Max number of posts to show on a blog page. Default value is `10`.                                                               | :x:                |\n| `PROJECT_FEED_PATH`       | Path used to load projects in the project feed from. Default value is `static/assets/projects/project_feed.json`.                | :x:                |\n| `SENDGRID_API_KEY`        | API key for SendGrid email integration.                                                                                          | :white_check_mark: |\n| `SENDGRID_DEFAULT_FROM`   | Email address used in the 'From' email field when sending messages from the contact form.                                        | :white_check_mark: |\n| `CONTACT_EMAIL`           | Email address that messages in the contact form will be sent to.                                                                 | :white_check_mark: |\n| `RECAPTCHA_PUBLIC_KEY`    | Public key used by ReCAPTCHA in the contact form.                                                                                | :white_check_mark: |\n| `RECAPTCHA_PRIVATE_KEY`   | Private key used by ReCAPTCHA in the contact form.                                                                               | :white_check_mark: |\n| `RECAPTCHA_DATA_ATTRS`    | Optional attributes that will be passed to the ReCAPTCHA component.                                                              | :x:                |\n| `LOG_LEVEL`               | Log level used by the app. See [logging levels](https://docs.python.org/3/library/logging.html#logging-levels)                   | :white_check_mark: |\n| `SENTRY_DSN`              | DSN for Sentry integration.                                                                                                      | :white_check_mark: |\n| `CONTENT_SECURITY_POLICY` | Content security policy used by the app.                                                                                         | :x:                |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeds6391%2Fportfolio-jed-simson","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeds6391%2Fportfolio-jed-simson","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeds6391%2Fportfolio-jed-simson/lists"}