{"id":24154874,"url":"https://github.com/444b/sttemplate","last_synced_at":"2026-05-09T19:40:07.089Z","repository":{"id":270499034,"uuid":"910562009","full_name":"444B/sttemplate","owner":"444B","description":"Production ready, streamlit template repo","archived":false,"fork":false,"pushed_at":"2025-01-01T17:36:35.000Z","size":144,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-22T23:06:15.496Z","etag":null,"topics":["cicd","dependencies","pypi","python","streamlit","uv"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/444B.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}},"created_at":"2024-12-31T16:32:52.000Z","updated_at":"2025-01-01T17:36:38.000Z","dependencies_parsed_at":"2024-12-31T20:21:50.546Z","dependency_job_id":"3cec61c3-5171-4bfc-bae1-10cdc0c72353","html_url":"https://github.com/444B/sttemplate","commit_stats":null,"previous_names":["444b/st.template","444b/sttemplate"],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/444B%2Fsttemplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/444B%2Fsttemplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/444B%2Fsttemplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/444B%2Fsttemplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/444B","download_url":"https://codeload.github.com/444B/sttemplate/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241435116,"owners_count":19962399,"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":["cicd","dependencies","pypi","python","streamlit","uv"],"created_at":"2025-01-12T12:26:23.520Z","updated_at":"2026-05-09T19:40:06.997Z","avatar_url":"https://github.com/444B.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sttemplate\nA minimal viable template repo for streamlit projects and publishing them on\nPyPi  \n\nThe repo comes with everything you would need to get started making scalable,\nmaintainable python ackages.  \nThis summarizes alot of what I had to learn to develop and maintain [Streamlit Analytics2](https://github.com/444B/streamlit-analytics2)\n\n\u003e[!TIP]\n\u003e How to use this repo\n\u003e 1. make a [fork](https://github.com/444B/sttemplate/fork)\n\u003e 1. clone it to a workstation\n\u003e 1. start adding your code into the src/ folder\n\u003e 1. add your dependencies (I will add a guide to this if there is interest, just open an issue)\n\u003e 1. test it by writing unit test in the tests/ folder and running checks.sh\n\u003e 1. set up Github action CI/CD and deploy to Pypi!\n\nHere is the layout and a description below for each section\n  \n├── [README.md](https://github.com/444B/sttemplate/blob/main/README.md#-readmemd)   \n├── [pyproject.toml](https://github.com/444B/sttemplate/blob/main/README.md#-pyprojecttoml)  \n├── [src](https://github.com/444B/sttemplate/blob/main/README.md#-src)  \n│   └── [sttemplate](https://github.com/444B/sttemplate/blob/main/README.md#----sttemplate)  \n│       ├── [__init__.py](https://github.com/444B/sttemplate/blob/main/README.md#--------initpy)  \n│       └── [app.py](https://github.com/444B/sttemplate/blob/main/README.md#--------apppy)  \n├── [tests](https://github.com/444B/sttemplate/blob/main/README.md#-tests)  \n│   ├── [checks.sh](https://github.com/444B/sttemplate/blob/main/README.md#----checkssh)  \n│   └── [test_calc.py](https://github.com/444B/sttemplate/blob/main/README.md#----test_calcpy)  \n└── [uv.lock](https://github.com/444B/sttemplate/blob/main/README.md#-uvlock)  \n\n---  \n## ├── README.md\n\nThis is the document you are reading at this very moment. It is essential to \nsharing what your project is about and how to use it.  \n\n--- \n\n## ├── pyproject.toml\n\nThis is a crucial part of your project and can be used for managing\ndependancies, configurations, and if you deploy to PyPi then it is the info on\nthe sidepanels.  \n\n--- \n\n## ├── src\n\nThis is the top level folder where your actual code will be.  \n\n--- \n\n## │   └── sttemplate\n\nThis sub level folder is the name of your project and package and organizes your\ncode even further.  \nYou would have one of these for each module you write but you need at least 1.  \n\n--- \n\n## │       ├── __init__.py\n\nThis very important file indicates to other python files that it organizes your\ncode into a module and can be imported with `import sttemplate`.  \nInside, you would define which functions and which files specifically are\navailible  \n\n--- \n\n## │       └── app.py\n\nHere is where the magic happens. Your Million dollar idea, the next IYKYKaaS.\nThis is why you get paid the big bucks but as you might be observing that quite\nalot goes on to make that magic code availible.  \n\n--- \n\n## ├── tests\n\nThis folder is essential for observing the true scale of your application with\nscale and complexity. `print()` and `logging.info` will only take you so far\nEspecially as you add features and make unpredictable changes, you will use code\nhere to test the `src/` code for correct behaviour.  \nThey also help our code be more readable and maintainable.  \n\n--- \n\n## │   ├── checks.sh\n\nThis is a custom script I came up with that collects alot of python packages\nused for testing:  \n- black = formatting  \n- isort = import sorting  \n- flake8 = linting  \n- mypy = type checking  \n- bandit = basic security checks  \n- pytest = unit testing  \n\n--- \n\n## │   └── test_calc.py\n\nThis is just an example of a pytest file that demonstrates how to do a unit test\nand also verifies that the imports set out in __init__.py work as intended.  \n\n--- \n\n## └── uv.lock\n\nThis section is opinionated since it touches on the topic of dependancy\nmanagement. [UV](https://docs.astral.sh/uv/) is a tool for managing all these \ndependencies and in my opinion it does a fair job of it. \nThere are many dependency managment tools such as pip, pipenv, poetry, tox or\neven just rawdogging it with `python -m`. Try them out and find what works best for you\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F444b%2Fsttemplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F444b%2Fsttemplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F444b%2Fsttemplate/lists"}