Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #342

Merged
merged 117 commits into from
Sep 23, 2024
Merged

Dev #342

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
a8c19e5
PN5180: Save about 500 Bytes of (static) RAM
tueddy Jan 21, 2024
5c555c3
Merge pull request #290 from RolinBert/patch-1
tueddy Jan 21, 2024
d73ed14
Update settings.h
derpicknicker1 Jan 23, 2024
925c48f
Update settings-override.h.sample
derpicknicker1 Jan 23, 2024
54601e8
Update README.md
derpicknicker1 Jan 23, 2024
78ae1b5
Merge pull request #291 from derpicknicker1/patch-1
tueddy Jan 23, 2024
7ee3e40
Fix compiler warning if NEOPIXEL_ENABLE not set
tueddy Jan 23, 2024
721032c
Add missing error msg for language EN
Jan 24, 2024
0e60ba8
keep original mtime for gzip compressed files
freddy36 Jan 30, 2024
4e92977
Merge pull request #293 from freddy36/processhtml
tueddy Jan 30, 2024
4e486cd
Set CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=256 to avoid audio dropouts
tueddy Jan 30, 2024
0cb249e
Add French Language (#292), thanks to @damda58 !
tueddy Jan 30, 2024
cf232b2
clang
tueddy Jan 30, 2024
8e9fea9
update changelog & revision
tueddy Jan 30, 2024
609f40b
Use dynamically allocated buffer for file upload
tueddy Feb 1, 2024
54d6ebd
Also print PSRAM infos in the /stats page
tueddy Feb 1, 2024
a4f8c51
Use NVS interator when reading RFID keys (save 4KB RAM), thanks to @l…
tueddy Feb 1, 2024
9a5f881
Remove nvsDump
tueddy Feb 1, 2024
d525159
improve progress calculation/indication
freddy36 Feb 2, 2024
d04f652
Merge pull request #294 from freddy36/webfiledur
tueddy Feb 2, 2024
d5d97e1
Increase JSON buffer for /debug endpoint
tueddy Feb 6, 2024
6c58eb2
Reduce WiFi memory consumption (#295)
laszloh Feb 7, 2024
7c94d2f
fix dangling pointer in explorerHandleFileStorageTask (#297)
freddy36 Feb 7, 2024
8bf67f4
update changelog & revision
tueddy Feb 7, 2024
1aa826b
apple-touch-icon
tueddy Feb 8, 2024
c171bfc
remove convertFilenameToAscii (#298)
freddy36 Feb 8, 2024
29ef0c3
Playlist fixes (#299)
freddy36 Feb 8, 2024
4ad7683
update changelog & revision
tueddy Feb 8, 2024
add11bf
remove explorerCreateParentDirectories (#301)
freddy36 Feb 9, 2024
a27693c
Increase stacksize for PN5180 task
tueddy Feb 9, 2024
95abb6c
Don't flood the log if batteryCheckInterval=0
tueddy Feb 10, 2024
496a73a
use natural sort (#296)
freddy36 Feb 12, 2024
d620a61
send numbers as json number instead of string (#302)
freddy36 Feb 12, 2024
4059ca0
update changelog & revision
tueddy Feb 12, 2024
a9aecac
use Number() for playlistSortMode (#303)
freddy36 Feb 12, 2024
ab0bcb3
Rework playlist generation (#275)
laszloh Feb 15, 2024
7de205b
update sorting strings (#306)
freddy36 Feb 15, 2024
a8aec46
set title and navbar heading to hostname (#305)
freddy36 Feb 15, 2024
2accd23
include mac address in info (#304)
freddy36 Feb 15, 2024
0d88a1d
setVolumeSteps on audio-task startup, see https://forum.espuino.de/t/…
tueddy Feb 15, 2024
0f1b79d
pass buffer size to convertAsciiToUtf8 (#307)
freddy36 Feb 18, 2024
e95073e
Add coverimage support for flac files in Web-UI
tueddy Feb 18, 2024
6345f6c
Add coverimage support for M4A files in Web-UI
tueddy Feb 20, 2024
e0feafb
Initialize variable, fix garbage in log
tueddy Feb 21, 2024
7b6d0b5
fix compiler & cppcheck warnings
tueddy Feb 27, 2024
ca5c216
clang
tueddy Feb 27, 2024
a2c112d
Fix inconsistency in API definition #308
tueddy Mar 4, 2024
a8eb245
Add coverimage support for ogg, vorbis, opus (and some flac), thanks …
tueddy Mar 15, 2024
d61ed15
clang fixes
tueddy Mar 15, 2024
cda7347
clang
tueddy Mar 15, 2024
c2bcae9
update third party libraries
tueddy Mar 15, 2024
2505a84
MQTT receive: Bug fix and avoid payload copy (#309)
eikel Mar 15, 2024
3f410db
add includes for upcoming Arduino 3
tueddy Mar 16, 2024
569b3b1
cppcheck
tueddy Mar 16, 2024
15a380a
check battery.chargelevel is assigned
tueddy Mar 16, 2024
e7ccd43
Websocket: Reduce memory usage by measurement of JSON payload length
tueddy Mar 16, 2024
170446e
Update audioI2S library (Fix PSRAM leakage with flac files)
tueddy Mar 28, 2024
401e050
Fix some warnings with upcoming Arduino 3 (ESP-IDF v5.1)
tueddy Mar 28, 2024
6bacc6e
Update PlatformIO package to 6.6.0 https://github.com/platformio/plat…
tueddy Mar 30, 2024
e202fdf
clang
tueddy Mar 30, 2024
9f25291
Update 3rd party libraries
tueddy Apr 5, 2024
9ed09f4
Equalizer settings to WebUI (#313)
Trainbird Apr 7, 2024
39fcaa3
clang
tueddy Apr 7, 2024
bdad5e4
Update changelog & revision
tueddy Apr 7, 2024
8c80d84
Embed swagger UI (#314)
caco3 Apr 14, 2024
119d3f7
update ESP32-audioI2S lib
tueddy Apr 14, 2024
4ef8f14
Fix warning "clearing an object of non-trivial type 'struct playProps'"
tueddy Apr 14, 2024
5a8cde7
Update audio lib, regression with saved playposition in audiobook mode
tueddy Apr 17, 2024
fff24d0
Fix remote UI debugging (#316)
caco3 Apr 18, 2024
afb8c6d
add button to expand/shrink file list (#317)
caco3 Apr 18, 2024
2f2805c
Correct log for SSID name, thanks to @sfields!
tueddy Apr 18, 2024
f9121ba
Get title from-VORBISCOMMENT and ID3, thanks to @sfields!
tueddy Apr 18, 2024
678b9a6
clang
tueddy Apr 18, 2024
7881a75
Correct calculation of gPlayProperties.currentRelPos, thanks to @sfie…
tueddy Apr 18, 2024
8b5d05c
Correct calculation of newFilePos for SEEK_POS_PERCENT, thanks to @sf…
tueddy Apr 18, 2024
bbd4bf4
Update changelog & revision
tueddy Apr 18, 2024
d9b9b88
Added virtual RFID-Cards (#319)
caco3 Apr 22, 2024
7dfe266
Increase JSON buffer for /info
tueddy Apr 22, 2024
5088334
Enhance UI minification (#323)
caco3 Apr 23, 2024
1d40155
Document Virtual RFID cards (#324)
caco3 Apr 23, 2024
1cebbd6
Update audio lib, changelog & revision
tueddy Apr 23, 2024
d6ca226
Fix js minification (#325)
caco3 Apr 24, 2024
1f64ce8
Fix breakage due to recursive minification (#326)
caco3 Apr 25, 2024
ab4cf79
Software-revision: 20240425-1-DEV
tueddy Apr 25, 2024
c5e117a
Cleanup UI (#327)
caco3 Apr 26, 2024
6412300
- Remove FastLED dependency from Wlan.cpp
tueddy Apr 26, 2024
612a454
clang
tueddy Apr 26, 2024
5a37383
Audio library, fix encoding of title
tueddy May 4, 2024
bf3af2e
Web UI Enhancements (#328)
caco3 May 9, 2024
db47419
Swagger: Add missing parameters for /upload and /update (#330)
caco3 May 13, 2024
8cd3af5
update audio lib, changelog & revision
tueddy May 13, 2024
7982317
PlatformIO package 6.7.0 (Arduino 2.0.16, ESP-IDF 4.4.7)
tueddy May 15, 2024
ded80a0
revert last commit: section `.iram0.text' will not fit in region `ira…
tueddy May 15, 2024
c1e9c7c
PlatformIO package 6.7.0 (Arduino 2.0.16, ESP-IDF 4.4.7)
tueddy May 20, 2024
f9593c9
fork natsort library to avoid compiler warning
tueddy May 22, 2024
f72988c
New webserver & optimized JSON delivery (#332)
tueddy Jun 9, 2024
eda0e21
Replace 3rd party library toastr by built in bootstrap v5 toaster sys…
Trainbird Jun 9, 2024
3ab1066
cppcheck: use const
tueddy Jun 9, 2024
5df8224
Consume about 50% less CPU time in Audio library
tueddy Jun 9, 2024
cdd0de2
Update changelog & revision
tueddy Jun 9, 2024
fe1d06a
Update PN5180 library
tueddy Jun 9, 2024
ee16ea6
Code reformat html+json
Sep 10, 2024
b76ea06
Adding html+json reformat to git blame ignore revs
Sep 10, 2024
6fa1f17
Ignore mqtt messages with length zero
Sep 11, 2024
b2a9c7a
Fix string's expected length for rfid-cmnd via mqtt
Sep 11, 2024
68482fd
change default settings to match "ESPuino-mini 4Layer" board
tueddy Sep 12, 2024
bab5072
Porting to new web server library completed (#335)
tueddy Sep 12, 2024
17df681
PlatformIO package 6.8.1 (Arduino 2.0.17, ESP-IDF 4.4.7)
tueddy Sep 12, 2024
5271922
Update Arduino-IRremote to v4.4.1
tueddy Sep 12, 2024
e2dc1cf
Revert Arduino-IRremote to 4.3.1
tueddy Sep 12, 2024
6a00706
Fix sleep after playlist not toggling nightmode #336, thanks to @dneu…
tueddy Sep 16, 2024
d58c06a
Re-designed tools page (#337)
caco3 Sep 18, 2024
8533479
update changelog & revision
tueddy Sep 18, 2024
24ffc99
HTML / JSON style
Sep 18, 2024
42b4822
document the virtual cards in the UI #333
tueddy Sep 19, 2024
1c3b427
Removed compiler directive
Sep 23, 2024
5b00b83
Merge branch 'master' into dev
biologist79 Sep 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@ d1f82a7c93f160f9197c8b4e14e5a984ac6f9449

# Code re-formatting with editorconf
3a562b67e3ca0f98ed128650440323c3b2d5fc78

# Code re-formatting for html+json
ee16ea64767c28420d3711bfe7b4a81c71f1e8bf
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,8 @@ sdkconfig.*
src/settings-override.h
src/settings-custom-override.h
node_modules/
html/REST_API.yaml
html/*.min.html
html/locales/*.min.json
html/js/*.min.min.js
html/js/swaggerInitializer.min.js
14 changes: 10 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ needs one GPIO less. So basically it's a no-brainer.
RC522 is so to say the ESPuino standard. It's cheap and works, but RFID tags have to be placed close
to the reader. PN5180 instead has better RFID range/sensitivity and can read ISO-15693 / iCode
SLIX2-tags aka 'Tonies' (you need a password to read Tonies), too. You can also wake up ESPuino with
the a ISO-14443 card (after flashing PN5180 with a new firmware). This feature is called LPCD.
the a RFID tag (after flashing PN5180 with a new firmware). This feature is called LPCD.
Disadvantages PN5180: it's more expensive and needs more GPIOs (6/7 instead of 4). In my opinion
it's worth it! Refer to PN5180's wiring section below for further information. Hint: if using 3.3 V
only make sure to connect these 3.3 V to PN5180's 5 V AND 3.3 V. Sounds weird but it's necessary.
Expand Down Expand Up @@ -260,11 +260,11 @@ It's not just simply playing music; different playback modes are supported:
- `Audiobook`=> single file or playlist/folder; last play position (file and playlist) is saved
(when pushing pause or moving to another track) and reused next time
- `Audiobook (loop)` => same as audiobook but loops forever
- `Folder/playlist (alph. sorted)` => plays all tracks in alph. order from a folder one time
- `Folder/playlist (sorted)` => plays all tracks in order from a folder one time
- `Folder/playlist (random order)` => plays all tracks in random order from a folder one time
- `Folder/playlist (alph. sorted)` => plays all tracks in alph. order from a folder forever
- `Folder/playlist (sorted)` => plays all tracks in order from a folder forever
- `Folder/playlist (random order)` => plays all tracks in random order from a folder forever
- `All tracks of a random subdirectory (sorted alph.)` => plays of tracks in alph. order of a
- `All tracks of a random subdirectory (sorted)` => plays of tracks in order of a
randomly picked subdirectory of a given directory
- `All tracks of a random subdirectory (random order)` => plays all tracks in random order of a
randomly picked subdirectory of a given directory
Expand Down Expand Up @@ -373,6 +373,12 @@ Most designs use a Neopixel ring, but a linear strip is also possible.
- **Previous** (long; keep pressed) + **Next** (short) + release (both): toggle WiFi
enabled/disabled

#### Virtual RFID cards

Any of the button actions can also be assigned to virtual RFID cards.
Those cards then can be assigned on the web GUI like normal cards.
To select a virtual RFID card, just press the configured button action, the virtual RFID automatically gets filled in in the web GUI.

### Music playback

- Music starts to play right away after a valid RFID tag was applied (if it's known to ESPuino).
Expand Down
75 changes: 49 additions & 26 deletions REST-API.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@ openapi: 3.0.0
info:
title: ESPuino API
version: 1.0.5
description: API for the ESPuino, a DIY Smart Speaker project. ESPuino is a DIY Smart Speaker that uses software-based audio decoding, supports various music sources, and offers a user-friendly web interface. It simplifies audio processing and enhances user feedback with Neopixel rings.

description: >-
API for the ESPuino, a DIY Smart Speaker project. ESPuino is a DIY Smart
Speaker that uses software-based audio decoding, supports various music
sources, and offers a user-friendly web interface. It simplifies audio
processing and enhances user feedback with Neopixel rings.
servers:
- url: http://espuino.local/
- url: /
description: Local Device
- url: 'http://espuino.local/'
description: Development ESPuino

paths:
/explorer:
get:
Expand All @@ -18,7 +22,7 @@ paths:
name: path
schema:
type: string
default: "/"
default: /
description: Path to the directory to be listed.
responses:
'200':
Expand All @@ -32,9 +36,11 @@ paths:
properties:
name:
type: string
isDir:
dir:
type: boolean
description: True if item is a directory.
description: >-
True if item is a directory. This parameter is omitted
for a file.
post:
summary: Upload a file to a directory.
description: Upload a file to the specified directory.
Expand Down Expand Up @@ -245,7 +251,7 @@ paths:
/settings:
get:
summary: Get common settings.
description: Get common settings, optionally for a specific section.
description: 'Get common settings, optionally for a specific section.'
parameters:
- in: query
name: section
Expand All @@ -261,6 +267,7 @@ paths:
type: object
properties:
# Include your common settings properties here.
null
post:
summary: Save settings.
description: Save common settings.
Expand Down Expand Up @@ -304,7 +311,9 @@ paths:
/rfid:
get:
summary: List all saved RFID-tag assignments with details.
description: Get a list of saved RFID-tag assignments with details. Optionally, provide an ID to list only a single assignment.
description: >-
Get a list of saved RFID-tag assignments with details. Optionally,
provide an ID to list only a single assignment.
parameters:
- in: query
name: id
Expand All @@ -322,6 +331,7 @@ paths:
type: object
properties:
# Include your RFID-tag assignment properties here.
null
post:
summary: Save or overwrite RFID-tag assignment.
description: Save a new RFID-tag assignment or overwrite an existing one.
Expand Down Expand Up @@ -372,7 +382,6 @@ paths:
type: array
items:
type: string

/cover:
get:
summary: Get album cover image.
Expand All @@ -385,7 +394,6 @@ paths:
schema:
type: string
format: binary

/info:
get:
summary: Get common information.
Expand All @@ -399,7 +407,7 @@ paths:
type: object
properties:
# Include your common information properties here.

null
/log:
get:
summary: Get current log.
Expand All @@ -411,7 +419,6 @@ paths:
text/plain:
schema:
type: string

/stats:
get:
summary: Get task runtime information.
Expand All @@ -423,7 +430,6 @@ paths:
text/html:
schema:
type: string

/debug:
get:
summary: Get debug information.
Expand All @@ -437,51 +443,69 @@ paths:
type: object
properties:
# Include your debug information properties here.

null
/upload:
post:
summary: Upload NVS backup.
description: Uploads a NVS backup file.
responses:
'200':
description: Successful response for NVS backup upload.

requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
/update:
post:
summary: Upload new firmware.
description: Uploads new firmware to ESPuino.
description: Uploads new firmware to ESPuino. Make sure to restart afterwards.
responses:
'200':
description: Successful response for firmware update.

requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
firmwareUpload:
type: string
format: binary
/restart:
post:
summary: Restart ESPuino.
description: Performs a restart of ESPuino. No parameters required.
responses:
'200':
description: Successful response for ESPuino restart.

/shutdown:
post:
summary: Shutdown ESPuino.
description: Performs a shutdown (deep-sleep) of ESPuino. No parameters required.
responses:
'200':
description: Successful response for ESPuino shutdown.

/rfidnvserase:
post:
summary: Erase RFID assignments from NVS.
description: Erases all RFID assignments from NVS.
responses:
'200':
description: Successful response for RFID assignments erasure.

/wifiscan:
get:
summary: Get nearby WiFi networks.
description: Get a list of available nearby WiFi networks. The first request will return 0 results unless you start the scan from somewhere else (loop/setup). Do not request more often than 3-5 seconds!
description: >-
Get a list of available nearby WiFi networks. The first request will
return 0 results unless you start the scan from somewhere else
(loop/setup). Do not request more often than 3-5 seconds!
responses:
'200':
description: Successful response with nearby WiFi networks.
Expand All @@ -491,11 +515,10 @@ paths:
type: array
items:
type: string

/trackprogress:
get:
summary: Get current track progress.
description: Get current track progress, time, and duration.
description: 'Get current track progress, time, and duration.'
responses:
'200':
description: Successful response with track progress information.
Expand All @@ -505,11 +528,11 @@ paths:
type: object
properties:
# Include your track progress information properties here.

null
/inithalleffectsensor:
get:
summary: Initialize Hall Effect Sensor Value.
description: Initializes the Hall Effect Sensor Value.
responses:
'200':
description: Successful response for initializing Hall Effect Sensor Value.
description: Successful response for initializing Hall Effect Sensor Value.
55 changes: 55 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,61 @@
# Changelog


## Version 2.2 (17.01.2024)

* 19.09.2024: Document the virtual cards in the UI #333, thanks to @caco3 !
* 18.09.2024: Re-designed tools page (#337), thanks to @caco3 !
* 16.09.2024: Fix sleep after playlist not toggling nightmode #336, thanks to @dneukirchen !
* 12.09.2024: PlatformIO package 6.8.1 (Arduino 2.0.17, ESP-IDF 4.4.7)
* 12.09.2024: Change default settings to match "ESPuino-mini 4Layer" board
* 11.09.2024: Fix string's expected length for rfid-cmnd via mqtt
* 11.09.2024: Ignore mqtt messages with length zero
* 10.09.2024: Porting to new web server library completed
* 09.06.2024: Consume about 50% less CPU time in Audio library
* 09.06.2024: Replace 3rd party library toastr (#331), thanks to @trainbird !
* 09.06.2024: Modernized webserver & optimized JSON delivery (#332)
* 20.05.2024: PlatformIO package 6.7.0 (Arduino 2.0.16, ESP-IDF 4.4.7)
* 20.05.2024: Disable bluetooth support for A1S (IRAM too small)
* 09.05.2024: Upgrade to Bootstrap v5.0 + Web-UI Enhancements (#328), thanks to @caco3 !
* 23.04.2024: Enhance UI minification (#323), thanks to @caco3 !
* 22.04.2024: Added virtual RFID-Cards (#319), thanks to @caco3 !
* 18.04.2024: Correct calculation of newFilePos for SEEK_POS_PERCENT, thanks to @sfields!
* 18.04.2024: Correct calculation of gPlayProperties.currentRelPos, thanks to @sfields!
* 18.04.2024: Get title from-VORBISCOMMENT and ID3, thanks to @sfields!
* 18.04.2024: Correct log for SSID name, thanks to @sfields!
* 18.04.2024: Add button to expand/shrink file list (#317), thanks to @caco3 !
* 18.04.2024: Fix remote UI debugging (#316), thanks to @caco3 !
* 14.04.2024: Embed swagger UI #314, thanks to @caco3 !
* 07.04.2024: Equalizer settings to WebUI #313, thanks to @trainbird !
* 28.03.2024: Audio lib, fix a memory leak with flac files
* 28.03.2024: Fix some warnings with upcoming Arduino 3 (ESP-IDF v5.1)
* 16.03.2024: Reduce memory usage by measurement of JSON payload length
* 15.03.2024: MQTT receive: Bug fix and avoid payload copy (#309), thanks to @eikel
* 15.03.2024: Add coverimage support for ogg, vorbis, opus (and some flac), thanks to @sfields !
* 19.02.2024: Add coverimage support for M4A files in Web-UI
* 18.02.2024: Add coverimage support for flac files in Web-UI, thanks to @sfields !
* 15.02.2024: Rework playlist generation (#275), thanks to @laszloh !
* 15.02.2024: Update sorting strings (#306), thanks to @freddy36 !
* 15.02.2024: Set title and navbar heading to hostname (#305), thanks to @freddy36 !
* 15.02.2024: Include mac address in info (#304), thanks to @freddy36 !
* 12.02.2024: Use natural sort (#296), thanks to @freddy36 !
* 09.02.2024: Remove explorerCreateParentDirectories (#301), thanks to @freddy36 !
* 08.02.2024: Remove convertFilenameToAscii (#298), Playlist fixes (#299), thanks to @freddy36 !
* 08.02.2024: Apple touch icon
* 07.02.2024: Fix dangling pointer in explorerHandleFileStorageTask (#297), thanks to @freddy36 !
* 07.02.2024: Reduce WiFi memory consumption (#295), thanks to @laszloh !
* 05.02.2024: Increase JSON buffer for /debug endpoint
* 02.02.2024: Improve progress calculation/indication, thanks to @freddy36 !
* 01.02.2024: Use NVS interator when reading RFID keys, save 4KB RAM , thanks to @laszloh !
* 01.02.2024: Use dynamically allocated buffer for file upload, save 32KB RAM , thanks to @laszloh !
* 30.01.2024: Add French Language (#292), thanks to @damda58 !
* 30.01.2024: Fix some audio dropouts with high-quality OPUS files
* 30.01.2024: Keep original mtime for gzip compressed files, avoiding uneccesary Web.o rebuilds (#293), thanks to @freddy36 !
* 23.01.2024: Updated documentation on LPCD setting, thanks to @derpicknicker1 !
* 21.01.2024: Build (tag 2.2) is broken when NEOPIXEL_ENABLE is not set #289, thanks to @RolinBert !
* 21.01.2024: PN5180: Save about 500 Bytes of RAM


## Version 2.2 (17.01.2024)

* 14.01.2024: Modify CMD_DIMM_LEDS_NIGHTMODE to toggle night light mode (#287), thanks to @laszloh !
Expand Down
7 changes: 0 additions & 7 deletions css/bootstrap.min.css

This file was deleted.

Loading
Loading