Initial commit: Shelly Manager with Textual CLI, Streamlit UI, and comprehensive .gitignore

Shelly device management app with mDNS/subnet discovery, inventory,
configuration, and mass operations for Gen1/Gen2+ devices.

Includes .gitignore excluding runtime data (device DB, user config),
AI conversation history, build artifacts, and common Python/OS patterns.
This commit is contained in:
2026-03-23 21:51:59 +01:00
commit 71803418e5
152 changed files with 23405 additions and 0 deletions
@@ -0,0 +1,128 @@
# Streamlit theme templates
Ready-to-use theme templates for Streamlit apps.
## Available themes
| Theme | Base | Primary color | Fonts |
|-------|------|---------------|-------|
| **snowflake** | Light | `#29B5E8` (cyan) | Inter, JetBrains Mono |
| **dracula** | Dark | `#BD93F9` (purple) | Fira Sans, JetBrains Mono |
| **nord** | Dark | `#88C0D0` (frost blue) | Inter, JetBrains Mono |
| **stripe** | Light | `#635BFF` (indigo) | Inter, Source Code Pro |
| **solarized-light** | Light | `#268BD2` (blue) | Source Sans 3, Source Code Pro |
| **spotify** | Dark | `#1DB954` (green) | Inter, Fira Code |
| **github** | Light | `#0969DA` (blue) | Inter, JetBrains Mono |
| **minimal** | Dark | `#6366f1` (indigo) | Inter, JetBrains Mono |
## Quick start
```bash
# Run a theme locally
cd templates/themes/spotify
uv sync
uv run streamlit run streamlit_app.py
```
## Deploying to Snowflake
Before deploying, update `snowflake.yml` with your account-specific resources:
```yaml
# Find available compute pools
SHOW COMPUTE POOLS;
# Find available external access integrations
SHOW EXTERNAL ACCESS INTEGRATIONS;
```
Then edit `snowflake.yml` to replace the placeholders:
- `<YOUR_COMPUTE_POOL>` → e.g., `STREAMLIT_DEDICATED_POOL`
- `<YOUR_PYPI_INTEGRATION>` → e.g., `PYPI_ACCESS_INTEGRATION`
- `<FROM_CONNECTION>` values are filled from your active connection
Deploy with:
```bash
snow streamlit deploy --replace
```
## How Streamlit theming works
A custom theme requires two things:
### 1. Theme configuration in `.streamlit/config.toml`
```toml
[theme]
base = "dark" # "dark" or "light"
primaryColor = "#1DB954" # Buttons, links, highlights
backgroundColor = "#121212" # Main background
secondaryBackgroundColor = "#181818" # Sidebar, cards
textColor = "#FFFFFF" # Main text color
font = "Inter" # Body font
codeFont = "FiraCode" # Code blocks
```
### 2. For Snowflake deployment: local font files
Snowflake doesn't allow remote URL fetches, so fonts must be bundled locally:
```toml
[server]
enableStaticServing = true # Required for static files
[[theme.fontFaces]]
family = "Inter"
url = "app/static/Inter-Regular.ttf" # Note: app/ prefix required
weight = 400
[[theme.fontFaces]]
family = "Inter"
url = "app/static/Inter-Bold.ttf"
weight = 700
```
Font files go in `static/` directory and are referenced with `app/static/` prefix.
### Sidebar theming (optional)
```toml
[theme.sidebar]
backgroundColor = "#181818"
secondaryBackgroundColor = "#121212"
borderColor = "#282828"
```
## Theme file structure
Each theme directory contains:
```
{theme}/
├── .streamlit/config.toml # Theme colors and fonts
├── streamlit_app.py # Demo app showing the theme
├── pyproject.toml # Dependencies
├── snowflake.yml # Snowflake deployment config
└── static/ # Bundled font files (*.ttf)
```
## Dependencies
All themes require Python >=3.11 and use:
- `snowflake-connector-python>=3.3.0` (required — `streamlit[snowflake]` silently skips this on Python 3.12+)
- `streamlit[snowflake]>=1.54.0`
- `altair>=5.5.0`
- `pandas>=2.2.3`
## Font licensing
All bundled fonts are licensed under the [SIL Open Font License 1.1](https://openfontlicense.org/), which permits free use, redistribution, and modification:
| Font | Used by | Source |
|------|---------|--------|
| Inter | snowflake, nord, spotify, github, minimal, stripe | [github.com/rsms/inter](https://github.com/rsms/inter) |
| JetBrains Mono | snowflake, dracula, nord, github, minimal | [github.com/JetBrains/JetBrainsMono](https://github.com/JetBrains/JetBrainsMono) |
| Fira Sans | dracula | [github.com/mozilla/Fira](https://github.com/mozilla/Fira) |
| Fira Code | spotify | [github.com/tonsky/FiraCode](https://github.com/tonsky/FiraCode) |
| Source Sans 3 | solarized-light | [github.com/adobe-fonts/source-sans](https://github.com/adobe-fonts/source-sans) |
| Source Code Pro | solarized-light, stripe | [github.com/adobe-fonts/source-code-pro](https://github.com/adobe-fonts/source-code-pro) |