Browse Source

Renaming app to Bambuddy

maziggy 5 months ago
parent
commit
6d71261de7
40 changed files with 126 additions and 98 deletions
  1. 2 2
      PLAN.md
  2. 53 53
      README.md
  3. 2 2
      backend/app/api/routes/settings.py
  4. 32 4
      backend/app/core/config.py
  5. 4 4
      backend/app/i18n/__init__.py
  6. 3 3
      backend/app/main.py
  7. 1 1
      backend/app/models/notification_template.py
  8. 10 10
      backend/app/schemas/notification_template.py
  9. 1 1
      backend/app/services/bambu_cloud.py
  10. 1 1
      backend/app/services/bambu_mqtt.py
  11. 4 4
      backend/app/services/notification_service.py
  12. 1 1
      frontend/index.html
  13. BIN
      frontend/public/img/android-chrome-192x192.png
  14. BIN
      frontend/public/img/android-chrome-512x512.png
  15. BIN
      frontend/public/img/apple-touch-icon.png
  16. BIN
      frontend/public/img/bambuddy_logo_dark.png
  17. BIN
      frontend/public/img/bambuddy_logo_light.png
  18. BIN
      frontend/public/img/bambusy_logo_dark.png
  19. BIN
      frontend/public/img/bambusy_logo_light.png
  20. BIN
      frontend/public/img/favicon-16x16.png
  21. BIN
      frontend/public/img/favicon-32x32.png
  22. BIN
      frontend/public/img/favicon.png
  23. 1 1
      frontend/src/api/client.ts
  24. 1 1
      frontend/src/components/AddNotificationModal.tsx
  25. 1 1
      frontend/src/components/KProfilesView.tsx
  26. 4 4
      frontend/src/components/Layout.tsx
  27. 1 1
      frontend/src/pages/CameraPage.tsx
  28. 2 2
      frontend/src/pages/SettingsPage.tsx
  29. 0 0
      static/assets/index-C1C_HwA0.js
  30. BIN
      static/img/android-chrome-192x192.png
  31. BIN
      static/img/android-chrome-512x512.png
  32. BIN
      static/img/apple-touch-icon.png
  33. BIN
      static/img/bambuddy_logo_dark.png
  34. BIN
      static/img/bambuddy_logo_light.png
  35. BIN
      static/img/bambusy_logo_dark.png
  36. BIN
      static/img/bambusy_logo_light.png
  37. BIN
      static/img/favicon-16x16.png
  38. BIN
      static/img/favicon-32x32.png
  39. BIN
      static/img/favicon.png
  40. 2 2
      static/index.html

+ 2 - 2
PLAN.md

@@ -58,7 +58,7 @@ Variables use `{variable_name}` syntax (Python format strings).
 
 
 ### Common Variables (all events):
 ### Common Variables (all events):
 - `{timestamp}` - Current date/time
 - `{timestamp}` - Current date/time
-- `{app_name}` - "BambuTrack"
+- `{app_name}` - "Bambuddy"
 
 
 ---
 ---
 
 
@@ -104,7 +104,7 @@ maintenance_due:
   body: "{printer}:\n{items}"
   body: "{printer}:\n{items}"
 
 
 test:
 test:
-  title: "BambuTrack Test"
+  title: "Bambuddy Test"
   body: "This is a test notification. If you see this, notifications are working!"
   body: "This is a test notification. If you see this, notifications are working!"
 ```
 ```
 
 

+ 53 - 53
README.md

@@ -2,7 +2,7 @@ TESTERS NEEDED!!!
 Since I only have X1C and H2D devices, I'm not able to test the application with other Bambu Lab models. Collaborate today and help the project to support the whole Bambu Lab printer family!
 Since I only have X1C and H2D devices, I'm not able to test the application with other Bambu Lab models. Collaborate today and help the project to support the whole Bambu Lab printer family!
 
 
 <p align="center">
 <p align="center">
-  <img src="static/img/bambusy_logo_dark.png" alt="Bambusy Logo" width="300">
+  <img src="static/img/bambuddy_logo_dark.png" alt="Bambuddy Logo" width="300">
 </p>
 </p>
 
 
 <p align="center">
 <p align="center">
@@ -188,7 +188,7 @@ Since I only have X1C and H2D devices, I'm not able to test the application with
 
 
 ### Network Requirements
 ### Network Requirements
 - Bambu Lab printer with **LAN Mode** enabled
 - Bambu Lab printer with **LAN Mode** enabled
-- Printer and Bambusy server must be on the same local network
+- Printer and Bambuddy server must be on the same local network
 - Ports used: 8883 (MQTT/TLS), 990 (FTPS)
 - Ports used: 8883 (MQTT/TLS), 990 (FTPS)
 
 
 ### Supported Printers
 ### Supported Printers
@@ -203,8 +203,8 @@ Since I only have X1C and H2D devices, I'm not able to test the application with
 
 
 ```bash
 ```bash
 # Clone the repository
 # Clone the repository
-git clone https://github.com/maziggy/bambusy.git
-cd bambusy
+git clone https://github.com/maziggy/bambuddy.git
+cd bambuddy
 
 
 # Create and activate virtual environment
 # Create and activate virtual environment
 python3 -m venv venv
 python3 -m venv venv
@@ -246,8 +246,8 @@ sudo apt install python3 python3-venv python3-pip nodejs npm git
 #### Step 2: Clone the Repository
 #### Step 2: Clone the Repository
 
 
 ```bash
 ```bash
-git clone https://github.com/maziggy/bambusy.git
-cd bambusy
+git clone https://github.com/maziggy/bambuddy.git
+cd bambuddy
 ```
 ```
 
 
 #### Step 3: Set Up Python Environment
 #### Step 3: Set Up Python Environment
@@ -300,22 +300,22 @@ Open http://localhost:8000 in your browser.
 Create a systemd service for automatic startup:
 Create a systemd service for automatic startup:
 
 
 ```bash
 ```bash
-sudo nano /etc/systemd/system/bambusy.service
+sudo nano /etc/systemd/system/bambuddy.service
 ```
 ```
 
 
 Add the following content (adjust paths as needed):
 Add the following content (adjust paths as needed):
 
 
 ```ini
 ```ini
 [Unit]
 [Unit]
-Description=Bambusy Print Archive
+Description=Bambuddy Print Archive
 After=network.target
 After=network.target
 
 
 [Service]
 [Service]
 Type=simple
 Type=simple
 User=YOUR_USERNAME
 User=YOUR_USERNAME
-WorkingDirectory=/home/YOUR_USERNAME/bambusy
-Environment="PATH=/home/YOUR_USERNAME/bambusy/venv/bin"
-ExecStart=/home/YOUR_USERNAME/bambusy/venv/bin/uvicorn backend.app.main:app --host 0.0.0.0 --port 8000
+WorkingDirectory=/home/YOUR_USERNAME/bambuddy
+Environment="PATH=/home/YOUR_USERNAME/bambuddy/venv/bin"
+ExecStart=/home/YOUR_USERNAME/bambuddy/venv/bin/uvicorn backend.app.main:app --host 0.0.0.0 --port 8000
 Restart=always
 Restart=always
 RestartSec=10
 RestartSec=10
 
 
@@ -327,31 +327,31 @@ Enable and start the service:
 
 
 ```bash
 ```bash
 sudo systemctl daemon-reload
 sudo systemctl daemon-reload
-sudo systemctl enable bambusy
-sudo systemctl start bambusy
+sudo systemctl enable bambuddy
+sudo systemctl start bambuddy
 
 
 # Check status
 # Check status
-sudo systemctl status bambusy
+sudo systemctl status bambuddy
 
 
 # View logs
 # View logs
-sudo journalctl -u bambusy -f
+sudo journalctl -u bambuddy -f
 ```
 ```
 
 
 ### Running with Docker (Coming Soon)
 ### Running with Docker (Coming Soon)
 
 
 ```bash
 ```bash
 docker run -d \
 docker run -d \
-  --name bambusy \
+  --name bambuddy \
   -p 8000:8000 \
   -p 8000:8000 \
-  -v bambusy_data:/app/data \
-  -v bambusy_archive:/app/archive \
-  maziggy/bambusy:latest
+  -v bambuddy_data:/app/data \
+  -v bambuddy_archive:/app/archive \
+  maziggy/bambuddy:latest
 ```
 ```
 
 
-### Updating Bambusy
+### Updating Bambuddy
 
 
 ```bash
 ```bash
-cd bambusy
+cd bambuddy
 git pull origin main
 git pull origin main
 
 
 # Activate virtual environment
 # Activate virtual environment
@@ -374,7 +374,7 @@ cd ..
 
 
 ### Enabling LAN Mode on Your Printer
 ### Enabling LAN Mode on Your Printer
 
 
-To connect Bambusy to your printer, you need to enable LAN Mode:
+To connect Bambuddy to your printer, you need to enable LAN Mode:
 
 
 1. On your printer, go to **Settings** > **Network** > **LAN Mode**
 1. On your printer, go to **Settings** > **Network** > **LAN Mode**
 2. Enable **LAN Mode** (this requires Developer Mode to be enabled first)
 2. Enable **LAN Mode** (this requires Developer Mode to be enabled first)
@@ -382,7 +382,7 @@ To connect Bambusy to your printer, you need to enable LAN Mode:
 4. Find your printer's **IP Address** in network settings
 4. Find your printer's **IP Address** in network settings
 5. Find your printer's **Serial Number** in device info
 5. Find your printer's **Serial Number** in device info
 
 
-### Adding a Printer in Bambusy
+### Adding a Printer in Bambuddy
 
 
 1. Go to the **Printers** page
 1. Go to the **Printers** page
 2. Click **Add Printer**
 2. Click **Add Printer**
@@ -397,7 +397,7 @@ The printer should connect automatically and show real-time status.
 
 
 ### Environment Variables
 ### Environment Variables
 
 
-Bambusy can be configured using environment variables or a `.env` file in the project root. Copy `.env.example` to `.env` and adjust as needed:
+Bambuddy can be configured using environment variables or a `.env` file in the project root. Copy `.env.example` to `.env` and adjust as needed:
 
 
 ```bash
 ```bash
 cp .env.example .env
 cp .env.example .env
@@ -407,12 +407,12 @@ cp .env.example .env
 |----------|---------|-------------|
 |----------|---------|-------------|
 | `DEBUG` | `false` | Enable debug mode (verbose logging, SQL queries) |
 | `DEBUG` | `false` | Enable debug mode (verbose logging, SQL queries) |
 | `LOG_LEVEL` | `INFO` | Log level when DEBUG=false (`DEBUG`, `INFO`, `WARNING`, `ERROR`) |
 | `LOG_LEVEL` | `INFO` | Log level when DEBUG=false (`DEBUG`, `INFO`, `WARNING`, `ERROR`) |
-| `LOG_TO_FILE` | `true` | Write logs to `logs/bambutrack.log` |
+| `LOG_TO_FILE` | `true` | Write logs to `logs/bambuddy.log` |
 
 
 **Production (default):**
 **Production (default):**
 - INFO level logging
 - INFO level logging
 - SQLAlchemy and HTTP library noise suppressed
 - SQLAlchemy and HTTP library noise suppressed
-- Logs written to `logs/bambutrack.log` (5MB rotating, 3 backups)
+- Logs written to `logs/bambuddy.log` (5MB rotating, 3 backups)
 
 
 **Development (`DEBUG=true`):**
 **Development (`DEBUG=true`):**
 - DEBUG level logging (verbose)
 - DEBUG level logging (verbose)
@@ -499,7 +499,7 @@ When a scheduled print is ready to start:
 
 
 ### K-Profiles (Pressure Advance)
 ### K-Profiles (Pressure Advance)
 
 
-K-profiles store pressure advance (Linear Advance) settings for different filament and nozzle combinations. Bambusy lets you view and manage these settings directly on your printers.
+K-profiles store pressure advance (Linear Advance) settings for different filament and nozzle combinations. Bambuddy lets you view and manage these settings directly on your printers.
 
 
 #### Viewing K-Profiles
 #### Viewing K-Profiles
 
 
@@ -513,7 +513,7 @@ K-profiles store pressure advance (Linear Advance) settings for different filame
 
 
 #### Dual-Nozzle Printers (H2 Series)
 #### Dual-Nozzle Printers (H2 Series)
 
 
-For dual-nozzle printers (H2D, H2C, H2S), Bambusy automatically detects the nozzle configuration and displays:
+For dual-nozzle printers (H2D, H2C, H2S), Bambuddy automatically detects the nozzle configuration and displays:
 - **Left/Right columns** showing profiles for each extruder
 - **Left/Right columns** showing profiles for each extruder
 - **Extruder filter** to show profiles for one extruder only
 - **Extruder filter** to show profiles for one extruder only
 - **Extruder selector** when adding new profiles
 - **Extruder selector** when adding new profiles
@@ -535,7 +535,7 @@ The nozzle count is auto-detected from MQTT temperature data when the printer co
 4. For dual-nozzle printers, select Left or Right extruder
 4. For dual-nozzle printers, select Left or Right extruder
 5. Enter the K-value and click **Save**
 5. Enter the K-value and click **Save**
 
 
-**Note:** Filaments must first be calibrated in Bambu Studio to appear in the dropdown. Bambusy reads the filament list from existing K-profiles on the printer.
+**Note:** Filaments must first be calibrated in Bambu Studio to appear in the dropdown. Bambuddy reads the filament list from existing K-profiles on the printer.
 
 
 #### Filtering and Search
 #### Filtering and Search
 
 
@@ -545,7 +545,7 @@ The nozzle count is auto-detected from MQTT temperature data when the printer co
 
 
 ### Smart Plug Integration
 ### Smart Plug Integration
 
 
-Bambusy supports Tasmota-based smart plugs for automated power control. This is useful for:
+Bambuddy supports Tasmota-based smart plugs for automated power control. This is useful for:
 - Automatically turning on your printer when a print starts
 - Automatically turning on your printer when a print starts
 - Safely turning off the printer after it cools down
 - Safely turning off the printer after it cools down
 - Energy savings by powering off idle printers
 - Energy savings by powering off idle printers
@@ -597,7 +597,7 @@ Use cases:
 
 
 #### Power Monitoring & Alerts
 #### Power Monitoring & Alerts
 
 
-For Tasmota plugs with energy monitoring (e.g., Sonoff S31), Bambusy can alert you when power consumption exceeds a threshold:
+For Tasmota plugs with energy monitoring (e.g., Sonoff S31), Bambuddy can alert you when power consumption exceeds a threshold:
 
 
 1. Enable **Power Alert** in the plug settings
 1. Enable **Power Alert** in the plug settings
 2. Set the **Power Threshold** in watts (e.g., 200W)
 2. Set the **Power Threshold** in watts (e.g., 200W)
@@ -618,7 +618,7 @@ Each plug card shows:
 
 
 ### Push Notifications
 ### Push Notifications
 
 
-Bambusy can send push notifications when print events occur. Notifications are useful for monitoring prints remotely without checking the app constantly.
+Bambuddy can send push notifications when print events occur. Notifications are useful for monitoring prints remotely without checking the app constantly.
 
 
 #### Supported Providers
 #### Supported Providers
 
 
@@ -713,7 +713,7 @@ Common variables available for all events: `{timestamp}`, `{app_name}`
 
 
 ### Spoolman Integration
 ### Spoolman Integration
 
 
-Bambusy integrates with [Spoolman](https://github.com/Donkie/Spoolman) for filament inventory management. When enabled, AMS filament data syncs with your Spoolman server, allowing you to track remaining filament across all your spools.
+Bambuddy integrates with [Spoolman](https://github.com/Donkie/Spoolman) for filament inventory management. When enabled, AMS filament data syncs with your Spoolman server, allowing you to track remaining filament across all your spools.
 
 
 #### Prerequisites
 #### Prerequisites
 
 
@@ -745,7 +745,7 @@ When connected:
 
 
 #### How Syncing Works
 #### How Syncing Works
 
 
-Bambusy matches AMS spools to Spoolman spools using the **tray UUID** - a unique 32-character identifier that Bambu Lab assigns to each original spool. This ensures consistent matching across different printer models.
+Bambuddy matches AMS spools to Spoolman spools using the **tray UUID** - a unique 32-character identifier that Bambu Lab assigns to each original spool. This ensures consistent matching across different printer models.
 
 
 **What gets synced:**
 **What gets synced:**
 - Remaining filament weight (from AMS sensor)
 - Remaining filament weight (from AMS sensor)
@@ -768,7 +768,7 @@ Bambusy matches AMS spools to Spoolman spools using the **tray UUID** - a unique
 - This is normal behavior - they don't have Bambu Lab tray UUIDs
 - This is normal behavior - they don't have Bambu Lab tray UUIDs
 
 
 **Connection issues:**
 **Connection issues:**
-- Verify the Spoolman URL is accessible from your Bambusy server
+- Verify the Spoolman URL is accessible from your Bambuddy server
 - Check that no firewall is blocking port 7912 (or your custom port)
 - Check that no firewall is blocking port 7912 (or your custom port)
 - Ensure Spoolman is running and healthy
 - Ensure Spoolman is running and healthy
 
 
@@ -778,22 +778,22 @@ Bambusy matches AMS spools to Spoolman spools using the **tray UUID** - a unique
 1. Add CallMeBot to your contacts: +34 644 51 95 23
 1. Add CallMeBot to your contacts: +34 644 51 95 23
 2. Send "I allow callmebot to send me messages" via WhatsApp
 2. Send "I allow callmebot to send me messages" via WhatsApp
 3. You'll receive an API key
 3. You'll receive an API key
-4. Enter your phone number (with country code) and API key in Bambusy
+4. Enter your phone number (with country code) and API key in Bambuddy
 
 
 **ntfy:**
 **ntfy:**
 1. Choose a unique topic name (e.g., `my-printer-alerts-xyz123`)
 1. Choose a unique topic name (e.g., `my-printer-alerts-xyz123`)
 2. Subscribe to it on your phone using the ntfy app or web interface
 2. Subscribe to it on your phone using the ntfy app or web interface
-3. Enter the topic name in Bambusy (server defaults to ntfy.sh)
+3. Enter the topic name in Bambuddy (server defaults to ntfy.sh)
 
 
 **Pushover:**
 **Pushover:**
 1. Create an account at [pushover.net](https://pushover.net/)
 1. Create an account at [pushover.net](https://pushover.net/)
 2. Create an application to get an API token
 2. Create an application to get an API token
-3. Enter your user key and app token in Bambusy
+3. Enter your user key and app token in Bambuddy
 
 
 **Telegram:**
 **Telegram:**
 1. Message @BotFather on Telegram to create a bot
 1. Message @BotFather on Telegram to create a bot
 2. Get your chat ID by messaging @userinfobot
 2. Get your chat ID by messaging @userinfobot
-3. Enter the bot token and chat ID in Bambusy
+3. Enter the bot token and chat ID in Bambuddy
 
 
 **Email:**
 **Email:**
 1. Configure your SMTP server settings
 1. Configure your SMTP server settings
@@ -805,12 +805,12 @@ Bambusy matches AMS spools to Spoolman spools using the **tray UUID** - a unique
 1. In your Discord server, go to channel settings > Integrations > Webhooks
 1. In your Discord server, go to channel settings > Integrations > Webhooks
 2. Click "New Webhook" and customize the name/avatar if desired
 2. Click "New Webhook" and customize the name/avatar if desired
 3. Copy the webhook URL
 3. Copy the webhook URL
-4. Paste the webhook URL in Bambusy
+4. Paste the webhook URL in Bambuddy
 
 
 **Webhook (Generic):**
 **Webhook (Generic):**
 1. Enter any URL that accepts POST requests
 1. Enter any URL that accepts POST requests
 2. Optionally add custom headers (e.g., Authorization tokens)
 2. Optionally add custom headers (e.g., Authorization tokens)
-3. Bambusy sends JSON payloads with event details
+3. Bambuddy sends JSON payloads with event details
 4. Useful for integrating with custom systems, Home Assistant, IFTTT, etc.
 4. Useful for integrating with custom systems, Home Assistant, IFTTT, etc.
 
 
 ## Tech Stack
 ## Tech Stack
@@ -824,7 +824,7 @@ Bambusy matches AMS spools to Spoolman spools using the **tray UUID** - a unique
 ## Project Structure
 ## Project Structure
 
 
 ```
 ```
-bambusy/
+bambuddy/
 ├── backend/
 ├── backend/
 │   └── app/
 │   └── app/
 │       ├── api/routes/      # API endpoints
 │       ├── api/routes/      # API endpoints
@@ -835,7 +835,7 @@ bambusy/
 ├── frontend/                # React application
 ├── frontend/                # React application
 ├── static/                  # Built frontend + images
 ├── static/                  # Built frontend + images
 ├── archive/                 # Stored 3MF files
 ├── archive/                 # Stored 3MF files
-└── bambusy.db              # SQLite database
+└── bambuddy.db              # SQLite database
 ```
 ```
 
 
 ## API Documentation
 ## API Documentation
@@ -884,27 +884,27 @@ Contributions are welcome! Please feel free to submit a Pull Request.
 
 
 ### Database errors
 ### Database errors
 
 
-The SQLite database (`bambusy.db`) is created automatically. If you encounter issues:
+The SQLite database (`bambuddy.db`) is created automatically. If you encounter issues:
 
 
 ```bash
 ```bash
 # Backup and reset database
 # Backup and reset database
-mv bambusy.db bambusy.db.backup
+mv bambuddy.db bambuddy.db.backup
 # Restart the application - a new database will be created
 # Restart the application - a new database will be created
 ```
 ```
 
 
 ### View server logs
 ### View server logs
 
 
-Bambusy writes logs to `bambutrack.log` in the application directory (rotating, max 5MB × 3 files).
+Bambuddy writes logs to `bambuddy.log` in the application directory (rotating, max 5MB × 3 files).
 
 
 ```bash
 ```bash
 # View live log file
 # View live log file
-tail -f bambutrack.log
+tail -f bambuddy.log
 
 
 # If running directly with verbose output
 # If running directly with verbose output
 uvicorn backend.app.main:app --host 0.0.0.0 --port 8000 --log-level debug
 uvicorn backend.app.main:app --host 0.0.0.0 --port 8000 --log-level debug
 
 
 # If running as systemd service
 # If running as systemd service
-sudo journalctl -u bambusy -f
+sudo journalctl -u bambuddy -f
 ```
 ```
 
 
 ### Smart plug not responding
 ### Smart plug not responding
@@ -913,13 +913,13 @@ sudo journalctl -u bambusy -f
 2. **Test via browser** - Visit `http://<plug-ip>/cm?cmnd=Power` to test directly
 2. **Test via browser** - Visit `http://<plug-ip>/cm?cmnd=Power` to test directly
 3. **Check Tasmota web interface** - Access `http://<plug-ip>` to verify Tasmota is running
 3. **Check Tasmota web interface** - Access `http://<plug-ip>` to verify Tasmota is running
 4. **Authentication** - If Tasmota has a password set, configure it in the plug settings
 4. **Authentication** - If Tasmota has a password set, configure it in the plug settings
-5. **Firewall** - Ensure port 80 is accessible between Bambusy server and the plug
+5. **Firewall** - Ensure port 80 is accessible between Bambuddy server and the plug
 
 
 ### Auto power-off not working
 ### Auto power-off not working
 
 
 1. **Check plug is linked** - The plug must be linked to a printer for automation
 1. **Check plug is linked** - The plug must be linked to a printer for automation
 2. **Verify automation is enabled** - Check the Enabled, Auto On, and Auto Off toggles
 2. **Verify automation is enabled** - Check the Enabled, Auto On, and Auto Off toggles
-3. **Temperature mode issues** - If using temperature mode, ensure the printer is still connected so Bambusy can read the nozzle temperature
+3. **Temperature mode issues** - If using temperature mode, ensure the printer is still connected so Bambuddy can read the nozzle temperature
 
 
 ### Scheduled print not starting
 ### Scheduled print not starting
 
 
@@ -927,7 +927,7 @@ sudo journalctl -u bambusy -f
 2. **Verify smart plug** - If using auto power-on, ensure the smart plug is configured and working
 2. **Verify smart plug** - If using auto power-on, ensure the smart plug is configured and working
 3. **Check queue status** - Look at the queue page for error messages
 3. **Check queue status** - Look at the queue page for error messages
 4. **Time zone issues** - Scheduled times are in your local time zone; ensure your system clock is correct
 4. **Time zone issues** - Scheduled times are in your local time zone; ensure your system clock is correct
-5. **View logs** - Check `bambutrack.log` for detailed error messages
+5. **View logs** - Check `bambuddy.log` for detailed error messages
 
 
 ### Print queue shows "Failed to start"
 ### Print queue shows "Failed to start"
 
 
@@ -939,7 +939,7 @@ Common causes:
 ### Timelapse not attaching automatically
 ### Timelapse not attaching automatically
 
 
 **The Problem:**
 **The Problem:**
-When printers run in **LAN-only mode** (disconnected from Bambu Cloud), they cannot sync time via NTP. This causes the printer's internal clock to drift significantly (sometimes days or weeks off). Bambusy matches timelapses by comparing the print completion time with the timelapse file's modification time - when the printer's clock is wrong, this matching fails.
+When printers run in **LAN-only mode** (disconnected from Bambu Cloud), they cannot sync time via NTP. This causes the printer's internal clock to drift significantly (sometimes days or weeks off). Bambuddy matches timelapses by comparing the print completion time with the timelapse file's modification time - when the printer's clock is wrong, this matching fails.
 
 
 **Symptoms:**
 **Symptoms:**
 - "Scan for Timelapse" shows "No matching timelapse found"
 - "Scan for Timelapse" shows "No matching timelapse found"
@@ -947,7 +947,7 @@ When printers run in **LAN-only mode** (disconnected from Bambu Cloud), they can
 - Printer shows incorrect date/time in its settings
 - Printer shows incorrect date/time in its settings
 
 
 **Workaround - Manual Selection:**
 **Workaround - Manual Selection:**
-When automatic matching fails, Bambusy now offers manual timelapse selection:
+When automatic matching fails, Bambuddy now offers manual timelapse selection:
 
 
 1. Right-click the archive and select **"Scan for Timelapse"**
 1. Right-click the archive and select **"Scan for Timelapse"**
 2. If no match is found, a dialog appears showing all available timelapse files on the printer
 2. If no match is found, a dialog appears showing all available timelapse files on the printer

+ 2 - 2
backend/app/api/routes/settings.py

@@ -408,7 +408,7 @@ async def export_backup(
                         pass  # Skip files that can't be read
                         pass  # Skip files that can't be read
 
 
         zip_buffer.seek(0)
         zip_buffer.seek(0)
-        filename = f"bambusy-backup-{datetime.now().strftime('%Y%m%d-%H%M%S')}.zip"
+        filename = f"bambuddy-backup-{datetime.now().strftime('%Y%m%d-%H%M%S')}.zip"
         return StreamingResponse(
         return StreamingResponse(
             zip_buffer,
             zip_buffer,
             media_type="application/zip",
             media_type="application/zip",
@@ -419,7 +419,7 @@ async def export_backup(
     return JSONResponse(
     return JSONResponse(
         content=backup,
         content=backup,
         headers={
         headers={
-            "Content-Disposition": f"attachment; filename=bambusy-backup-{datetime.now().strftime('%Y%m%d-%H%M%S')}.json"
+            "Content-Disposition": f"attachment; filename=bambuddy-backup-{datetime.now().strftime('%Y%m%d-%H%M%S')}.json"
         }
         }
     )
     )
 
 

+ 32 - 4
backend/app/core/config.py

@@ -1,21 +1,49 @@
 from pathlib import Path
 from pathlib import Path
 from pydantic_settings import BaseSettings
 from pydantic_settings import BaseSettings
+import logging
 
 
 # Application version - single source of truth
 # Application version - single source of truth
 APP_VERSION = "0.1.5b"
 APP_VERSION = "0.1.5b"
-GITHUB_REPO = "maziggy/bambusy"
+GITHUB_REPO = "maziggy/bambuddy"
+
+# Base directory for path calculations
+_base_dir = Path(__file__).resolve().parent.parent.parent.parent
+
+
+def _migrate_database() -> Path:
+    """Migrate database from old name to new name if needed."""
+    old_db = _base_dir / "bambutrack.db"
+    new_db = _base_dir / "bambuddy.db"
+
+    # If old database exists and new one doesn't, rename it
+    if old_db.exists() and not new_db.exists():
+        try:
+            old_db.rename(new_db)
+            logging.info(f"Migrated database: {old_db} -> {new_db}")
+        except Exception as e:
+            logging.warning(f"Could not migrate database: {e}. Using old location.")
+            return old_db
+
+    # If old database exists (and new one now exists too), it was migrated
+    # If only new exists, use new
+    # If neither exists, use new (will be created)
+    return new_db if new_db.exists() or not old_db.exists() else old_db
+
+
+# Determine database path (handles migration)
+_db_path = _migrate_database()
 
 
 
 
 class Settings(BaseSettings):
 class Settings(BaseSettings):
-    app_name: str = "BambuTrack"
+    app_name: str = "Bambuddy"
     debug: bool = False  # Default to production mode
     debug: bool = False  # Default to production mode
 
 
     # Paths
     # Paths
-    base_dir: Path = Path(__file__).resolve().parent.parent.parent.parent
+    base_dir: Path = _base_dir
     archive_dir: Path = base_dir / "archive"
     archive_dir: Path = base_dir / "archive"
     static_dir: Path = base_dir / "static"
     static_dir: Path = base_dir / "static"
     log_dir: Path = base_dir / "logs"
     log_dir: Path = base_dir / "logs"
-    database_url: str = f"sqlite+aiosqlite:///{base_dir}/bambutrack.db"
+    database_url: str = f"sqlite+aiosqlite:///{_db_path}"
 
 
     # Logging
     # Logging
     log_level: str = "INFO"  # Override with LOG_LEVEL env var or DEBUG=true
     log_level: str = "INFO"  # Override with LOG_LEVEL env var or DEBUG=true

+ 4 - 4
backend/app/i18n/__init__.py

@@ -33,8 +33,8 @@ EN = {
         "soon": "Soon",
         "soon": "Soon",
 
 
         # Test notification
         # Test notification
-        "test_title": "BambuTrack Test",
-        "test_message": "This is a test notification from BambuTrack. If you see this, notifications are working correctly!",
+        "test_title": "Bambuddy Test",
+        "test_message": "This is a test notification from Bambuddy. If you see this, notifications are working correctly!",
     }
     }
 }
 }
 
 
@@ -69,8 +69,8 @@ DE = {
         "soon": "Bald",
         "soon": "Bald",
 
 
         # Test notification
         # Test notification
-        "test_title": "BambuTrack Test",
-        "test_message": "Dies ist eine Testbenachrichtigung von BambuTrack. Wenn Sie dies sehen, funktionieren die Benachrichtigungen!",
+        "test_title": "Bambuddy Test",
+        "test_message": "Dies ist eine Testbenachrichtigung von Bambuddy. Wenn Sie dies sehen, funktionieren die Benachrichtigungen!",
     }
     }
 }
 }
 
 

+ 3 - 3
backend/app/main.py

@@ -29,7 +29,7 @@ root_logger.addHandler(console_handler)
 
 
 # File handler - only in production or if explicitly enabled
 # File handler - only in production or if explicitly enabled
 if app_settings.log_to_file:
 if app_settings.log_to_file:
-    log_file = app_settings.log_dir / "bambutrack.log"
+    log_file = app_settings.log_dir / "bambuddy.log"
     file_handler = RotatingFileHandler(
     file_handler = RotatingFileHandler(
         log_file,
         log_file,
         maxBytes=5*1024*1024,  # 5MB
         maxBytes=5*1024*1024,  # 5MB
@@ -47,7 +47,7 @@ if not app_settings.debug:
     logging.getLogger("httpcore").setLevel(logging.WARNING)
     logging.getLogger("httpcore").setLevel(logging.WARNING)
     logging.getLogger("httpx").setLevel(logging.WARNING)
     logging.getLogger("httpx").setLevel(logging.WARNING)
 
 
-logging.info(f"BambuTrack starting - debug={app_settings.debug}, log_level={log_level_str}")
+logging.info(f"Bambuddy starting - debug={app_settings.debug}, log_level={log_level_str}")
 from fastapi.staticfiles import StaticFiles
 from fastapi.staticfiles import StaticFiles
 from fastapi.responses import FileResponse
 from fastapi.responses import FileResponse
 
 
@@ -1062,7 +1062,7 @@ async def serve_frontend():
     if index_file.exists():
     if index_file.exists():
         return FileResponse(index_file)
         return FileResponse(index_file)
     return {
     return {
-        "message": "BambuTrack API",
+        "message": "Bambuddy API",
         "docs": "/docs",
         "docs": "/docs",
         "frontend": "Build and place React app in /static directory",
         "frontend": "Build and place React app in /static directory",
     }
     }

+ 1 - 1
backend/app/models/notification_template.py

@@ -84,7 +84,7 @@ DEFAULT_TEMPLATES = [
     {
     {
         "event_type": "test",
         "event_type": "test",
         "name": "Test Notification",
         "name": "Test Notification",
-        "title_template": "BambuTrack Test",
+        "title_template": "Bambuddy Test",
         "body_template": "This is a test notification. If you see this, notifications are working!",
         "body_template": "This is a test notification. If you see this, notifications are working!",
     },
     },
 ]
 ]

+ 10 - 10
backend/app/schemas/notification_template.py

@@ -42,7 +42,7 @@ SAMPLE_DATA: dict[str, dict[str, str]] = {
         "filename": "Benchy.3mf",
         "filename": "Benchy.3mf",
         "estimated_time": "1h 23m",
         "estimated_time": "1h 23m",
         "timestamp": "2024-01-15 14:30",
         "timestamp": "2024-01-15 14:30",
-        "app_name": "BambuTrack",
+        "app_name": "Bambuddy",
     },
     },
     "print_complete": {
     "print_complete": {
         "printer": "Bambu X1C",
         "printer": "Bambu X1C",
@@ -50,7 +50,7 @@ SAMPLE_DATA: dict[str, dict[str, str]] = {
         "duration": "1h 18m",
         "duration": "1h 18m",
         "filament_grams": "15.2",
         "filament_grams": "15.2",
         "timestamp": "2024-01-15 15:48",
         "timestamp": "2024-01-15 15:48",
-        "app_name": "BambuTrack",
+        "app_name": "Bambuddy",
     },
     },
     "print_failed": {
     "print_failed": {
         "printer": "Bambu X1C",
         "printer": "Bambu X1C",
@@ -58,14 +58,14 @@ SAMPLE_DATA: dict[str, dict[str, str]] = {
         "duration": "0h 45m",
         "duration": "0h 45m",
         "reason": "Filament runout",
         "reason": "Filament runout",
         "timestamp": "2024-01-15 15:15",
         "timestamp": "2024-01-15 15:15",
-        "app_name": "BambuTrack",
+        "app_name": "Bambuddy",
     },
     },
     "print_stopped": {
     "print_stopped": {
         "printer": "Bambu X1C",
         "printer": "Bambu X1C",
         "filename": "Benchy.3mf",
         "filename": "Benchy.3mf",
         "duration": "0h 30m",
         "duration": "0h 30m",
         "timestamp": "2024-01-15 15:00",
         "timestamp": "2024-01-15 15:00",
-        "app_name": "BambuTrack",
+        "app_name": "Bambuddy",
     },
     },
     "print_progress": {
     "print_progress": {
         "printer": "Bambu X1C",
         "printer": "Bambu X1C",
@@ -73,19 +73,19 @@ SAMPLE_DATA: dict[str, dict[str, str]] = {
         "progress": "50",
         "progress": "50",
         "remaining_time": "0h 41m",
         "remaining_time": "0h 41m",
         "timestamp": "2024-01-15 15:00",
         "timestamp": "2024-01-15 15:00",
-        "app_name": "BambuTrack",
+        "app_name": "Bambuddy",
     },
     },
     "printer_offline": {
     "printer_offline": {
         "printer": "Bambu X1C",
         "printer": "Bambu X1C",
         "timestamp": "2024-01-15 14:30",
         "timestamp": "2024-01-15 14:30",
-        "app_name": "BambuTrack",
+        "app_name": "Bambuddy",
     },
     },
     "printer_error": {
     "printer_error": {
         "printer": "Bambu X1C",
         "printer": "Bambu X1C",
         "error_type": "AMS Error",
         "error_type": "AMS Error",
         "error_detail": "Filament slot 1 jammed",
         "error_detail": "Filament slot 1 jammed",
         "timestamp": "2024-01-15 14:30",
         "timestamp": "2024-01-15 14:30",
-        "app_name": "BambuTrack",
+        "app_name": "Bambuddy",
     },
     },
     "filament_low": {
     "filament_low": {
         "printer": "Bambu X1C",
         "printer": "Bambu X1C",
@@ -93,16 +93,16 @@ SAMPLE_DATA: dict[str, dict[str, str]] = {
         "remaining_percent": "15",
         "remaining_percent": "15",
         "color": "Black PLA",
         "color": "Black PLA",
         "timestamp": "2024-01-15 14:30",
         "timestamp": "2024-01-15 14:30",
-        "app_name": "BambuTrack",
+        "app_name": "Bambuddy",
     },
     },
     "maintenance_due": {
     "maintenance_due": {
         "printer": "Bambu X1C",
         "printer": "Bambu X1C",
         "items": "• Nozzle cleaning (OVERDUE)\n• Carbon rod lubrication (Soon)",
         "items": "• Nozzle cleaning (OVERDUE)\n• Carbon rod lubrication (Soon)",
         "timestamp": "2024-01-15 14:30",
         "timestamp": "2024-01-15 14:30",
-        "app_name": "BambuTrack",
+        "app_name": "Bambuddy",
     },
     },
     "test": {
     "test": {
-        "app_name": "BambuTrack",
+        "app_name": "Bambuddy",
         "timestamp": "2024-01-15 14:30",
         "timestamp": "2024-01-15 14:30",
     },
     },
 }
 }

+ 1 - 1
backend/app/services/bambu_cloud.py

@@ -50,7 +50,7 @@ class BambuCloudService:
         """Get headers for authenticated requests."""
         """Get headers for authenticated requests."""
         headers = {
         headers = {
             "Content-Type": "application/json",
             "Content-Type": "application/json",
-            "User-Agent": "BambuTrack/1.0",
+            "User-Agent": "Bambuddy/1.0",
         }
         }
         if self.access_token:
         if self.access_token:
             headers["Authorization"] = f"Bearer {self.access_token}"
             headers["Authorization"] = f"Bearer {self.access_token}"

+ 1 - 1
backend/app/services/bambu_mqtt.py

@@ -1502,7 +1502,7 @@ class BambuMQTTClient:
         self._loop = loop
         self._loop = loop
         self._client = mqtt.Client(
         self._client = mqtt.Client(
             callback_api_version=mqtt.CallbackAPIVersion.VERSION2,
             callback_api_version=mqtt.CallbackAPIVersion.VERSION2,
-            client_id=f"bambutrack_{self.serial_number}",
+            client_id=f"bambuddy_{self.serial_number}",
             protocol=mqtt.MQTTv311,
             protocol=mqtt.MQTTv311,
         )
         )
 
 

+ 4 - 4
backend/app/services/notification_service.py

@@ -119,7 +119,7 @@ class NotificationService:
         """Build notification title and body from template."""
         """Build notification title and body from template."""
         # Add common variables
         # Add common variables
         variables["timestamp"] = datetime.now().strftime("%Y-%m-%d %H:%M")
         variables["timestamp"] = datetime.now().strftime("%Y-%m-%d %H:%M")
-        variables["app_name"] = "BambuTrack"
+        variables["app_name"] = "Bambuddy"
 
 
         template = await self._get_template(db, event_type)
         template = await self._get_template(db, event_type)
         if not template:
         if not template:
@@ -139,7 +139,7 @@ class NotificationService:
         if db:
         if db:
             title, message = await self._build_message_from_template(db, "test", {})
             title, message = await self._build_message_from_template(db, "test", {})
         else:
         else:
-            title = "BambuTrack Test"
+            title = "Bambuddy Test"
             message = "This is a test notification. If you see this, notifications are working!"
             message = "This is a test notification. If you see this, notifications are working!"
 
 
         try:
         try:
@@ -287,7 +287,7 @@ class NotificationService:
             msg = MIMEMultipart()
             msg = MIMEMultipart()
             msg["From"] = from_email
             msg["From"] = from_email
             msg["To"] = to_email
             msg["To"] = to_email
-            msg["Subject"] = f"[BambuTrack] {subject}"
+            msg["Subject"] = f"[Bambuddy] {subject}"
             msg.attach(MIMEText(body, "plain"))
             msg.attach(MIMEText(body, "plain"))
 
 
             if security == "ssl":
             if security == "ssl":
@@ -357,7 +357,7 @@ class NotificationService:
             custom_field_title: title,
             custom_field_title: title,
             custom_field_message: message,
             custom_field_message: message,
             "timestamp": datetime.now().isoformat(),
             "timestamp": datetime.now().isoformat(),
-            "source": "BambuTrack",
+            "source": "Bambuddy",
         }
         }
 
 
         headers = {"Content-Type": "application/json"}
         headers = {"Content-Type": "application/json"}

+ 1 - 1
frontend/index.html

@@ -3,7 +3,7 @@
   <head>
   <head>
     <meta charset="UTF-8" />
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>Bambusy</title>
+    <title>Bambuddy</title>
     <link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png" />
     <link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png" />
     <link rel="icon" type="image/png" sizes="16x16" href="/img/favicon-16x16.png" />
     <link rel="icon" type="image/png" sizes="16x16" href="/img/favicon-16x16.png" />
     <link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png" />
     <link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png" />

BIN
frontend/public/img/android-chrome-192x192.png


BIN
frontend/public/img/android-chrome-512x512.png


BIN
frontend/public/img/apple-touch-icon.png


BIN
frontend/public/img/bambuddy_logo_dark.png


BIN
frontend/public/img/bambuddy_logo_light.png


BIN
frontend/public/img/bambusy_logo_dark.png


BIN
frontend/public/img/bambusy_logo_light.png


BIN
frontend/public/img/favicon-16x16.png


BIN
frontend/public/img/favicon-32x32.png


BIN
frontend/public/img/favicon.png


+ 1 - 1
frontend/src/api/client.ts

@@ -1166,7 +1166,7 @@ export const api = {
 
 
     // Get filename from Content-Disposition header
     // Get filename from Content-Disposition header
     const contentDisposition = response.headers.get('Content-Disposition');
     const contentDisposition = response.headers.get('Content-Disposition');
-    let filename = 'bambusy-backup.json';
+    let filename = 'bambuddy-backup.json';
     if (contentDisposition) {
     if (contentDisposition) {
       const match = contentDisposition.match(/filename=([^;]+)/);
       const match = contentDisposition.match(/filename=([^;]+)/);
       if (match) filename = match[1].trim();
       if (match) filename = match[1].trim();

+ 1 - 1
frontend/src/components/AddNotificationModal.tsx

@@ -167,7 +167,7 @@ export function AddNotificationModal({ provider, onClose }: AddNotificationModal
       case 'ntfy':
       case 'ntfy':
         return [
         return [
           { key: 'server', label: 'Server URL', placeholder: 'https://ntfy.sh', type: 'text', required: false },
           { key: 'server', label: 'Server URL', placeholder: 'https://ntfy.sh', type: 'text', required: false },
-          { key: 'topic', label: 'Topic', placeholder: 'my-bambutrack', type: 'text', required: true },
+          { key: 'topic', label: 'Topic', placeholder: 'my-bambuddy', type: 'text', required: true },
           { key: 'auth_token', label: 'Auth Token', placeholder: 'Optional authentication', type: 'password', required: false },
           { key: 'auth_token', label: 'Auth Token', placeholder: 'Optional authentication', type: 'password', required: false },
         ];
         ];
       case 'pushover':
       case 'pushover':

+ 1 - 1
frontend/src/components/KProfilesView.tsx

@@ -580,7 +580,7 @@ function KProfileModal({
                 className="w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white placeholder-bambu-gray focus:border-bambu-green focus:outline-none resize-none"
                 className="w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white placeholder-bambu-gray focus:border-bambu-green focus:outline-none resize-none"
               />
               />
               <p className="text-xs text-bambu-gray mt-1">
               <p className="text-xs text-bambu-gray mt-1">
-                Notes are saved in Bambusy, not on the printer
+                Notes are saved in Bambuddy, not on the printer
               </p>
               </p>
             </div>
             </div>
 
 

+ 4 - 4
frontend/src/components/Layout.tsx

@@ -215,8 +215,8 @@ export function Layout() {
         {/* Logo */}
         {/* Logo */}
         <div className={`border-b border-bambu-dark-tertiary flex items-center justify-center ${sidebarExpanded ? 'p-4' : 'p-2'}`}>
         <div className={`border-b border-bambu-dark-tertiary flex items-center justify-center ${sidebarExpanded ? 'p-4' : 'p-2'}`}>
           <img
           <img
-            src={theme === 'dark' ? '/img/bambusy_logo_dark.png' : '/img/bambusy_logo_light.png'}
-            alt="Bambusy"
+            src={theme === 'dark' ? '/img/bambuddy_logo_dark.png' : '/img/bambuddy_logo_light.png'}
+            alt="Bambuddy"
             className={sidebarExpanded ? 'h-16 w-auto' : 'h-8 w-8 object-cover object-left'}
             className={sidebarExpanded ? 'h-16 w-auto' : 'h-8 w-8 object-cover object-left'}
           />
           />
         </div>
         </div>
@@ -295,7 +295,7 @@ export function Layout() {
               </div>
               </div>
               <div className="flex items-center gap-1">
               <div className="flex items-center gap-1">
                 <a
                 <a
-                  href="https://github.com/maziggy/bambusy"
+                  href="https://github.com/maziggy/bambuddy"
                   target="_blank"
                   target="_blank"
                   rel="noopener noreferrer"
                   rel="noopener noreferrer"
                   className="p-2 rounded-lg hover:bg-bambu-dark-tertiary transition-colors text-bambu-gray-light hover:text-white"
                   className="p-2 rounded-lg hover:bg-bambu-dark-tertiary transition-colors text-bambu-gray-light hover:text-white"
@@ -331,7 +331,7 @@ export function Layout() {
                 </button>
                 </button>
               )}
               )}
               <a
               <a
-                href="https://github.com/maziggy/bambusy"
+                href="https://github.com/maziggy/bambuddy"
                 target="_blank"
                 target="_blank"
                 rel="noopener noreferrer"
                 rel="noopener noreferrer"
                 className="p-2 rounded-lg hover:bg-bambu-dark-tertiary transition-colors text-bambu-gray-light hover:text-white"
                 className="p-2 rounded-lg hover:bg-bambu-dark-tertiary transition-colors text-bambu-gray-light hover:text-white"

+ 1 - 1
frontend/src/pages/CameraPage.tsx

@@ -30,7 +30,7 @@ export function CameraPage() {
       document.title = `${printer.name} - Camera`;
       document.title = `${printer.name} - Camera`;
     }
     }
     return () => {
     return () => {
-      document.title = 'Bambusy';
+      document.title = 'Bambuddy';
     };
     };
   }, [printer]);
   }, [printer]);
 
 

+ 2 - 2
frontend/src/pages/SettingsPage.tsx

@@ -313,7 +313,7 @@ export function SettingsPage() {
     <div className="p-8">
     <div className="p-8">
       <div className="mb-8">
       <div className="mb-8">
         <h1 className="text-2xl font-bold text-white">Settings</h1>
         <h1 className="text-2xl font-bold text-white">Settings</h1>
-        <p className="text-bambu-gray">Configure Bambusy</p>
+        <p className="text-bambu-gray">Configure Bambuddy</p>
       </div>
       </div>
 
 
       {/* Tab Navigation */}
       {/* Tab Navigation */}
@@ -1424,7 +1424,7 @@ export function SettingsPage() {
       {showClearStorageConfirm && (
       {showClearStorageConfirm && (
         <ConfirmModal
         <ConfirmModal
           title="Clear All Local Storage"
           title="Clear All Local Storage"
-          message="WARNING: This will clear ALL browser data for Bambusy including your sidebar order, preferences, and cached data. The page will reload after clearing. This action cannot be undone!"
+          message="WARNING: This will clear ALL browser data for Bambuddy including your sidebar order, preferences, and cached data. The page will reload after clearing. This action cannot be undone!"
           confirmText="Clear Everything"
           confirmText="Clear Everything"
           variant="danger"
           variant="danger"
           onConfirm={() => {
           onConfirm={() => {

File diff suppressed because it is too large
+ 0 - 0
static/assets/index-C1C_HwA0.js


BIN
static/img/android-chrome-192x192.png


BIN
static/img/android-chrome-512x512.png


BIN
static/img/apple-touch-icon.png


BIN
static/img/bambuddy_logo_dark.png


BIN
static/img/bambuddy_logo_light.png


BIN
static/img/bambusy_logo_dark.png


BIN
static/img/bambusy_logo_light.png


BIN
static/img/favicon-16x16.png


BIN
static/img/favicon-32x32.png


BIN
static/img/favicon.png


+ 2 - 2
static/index.html

@@ -3,11 +3,11 @@
   <head>
   <head>
     <meta charset="UTF-8" />
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>Bambusy</title>
+    <title>Bambuddy</title>
     <link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png" />
     <link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png" />
     <link rel="icon" type="image/png" sizes="16x16" href="/img/favicon-16x16.png" />
     <link rel="icon" type="image/png" sizes="16x16" href="/img/favicon-16x16.png" />
     <link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png" />
     <link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png" />
-    <script type="module" crossorigin src="/assets/index-DRtbW6PZ.js"></script>
+    <script type="module" crossorigin src="/assets/index-C1C_HwA0.js"></script>
     <link rel="stylesheet" crossorigin href="/assets/index-79rMOukP.css">
     <link rel="stylesheet" crossorigin href="/assets/index-79rMOukP.css">
   </head>
   </head>
   <body>
   <body>

Some files were not shown because too many files changed in this diff