[add] rename to AnthoLume
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
bc3e9cbaf0
commit
a8bcd0f588
@ -24,7 +24,7 @@ steps:
|
|||||||
- name: publish_docker
|
- name: publish_docker
|
||||||
image: plugins/docker
|
image: plugins/docker
|
||||||
settings:
|
settings:
|
||||||
repo: gitea.va.reichard.io/evan/bookmanager
|
repo: gitea.va.reichard.io/evan/antholume
|
||||||
registry: gitea.va.reichard.io
|
registry: gitea.va.reichard.io
|
||||||
tags:
|
tags:
|
||||||
- dev
|
- dev
|
||||||
|
14
Dockerfile
14
Dockerfile
@ -10,17 +10,17 @@ WORKDIR /src
|
|||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# Create Package Directory
|
# Create Package Directory
|
||||||
RUN mkdir -p /opt/bookmanager
|
RUN mkdir -p /opt/antholume
|
||||||
|
|
||||||
# Compile
|
# Compile
|
||||||
RUN go build -o /opt/bookmanager/server; \
|
RUN go build -o /opt/antholume/server; \
|
||||||
cp -a ./templates /opt/bookmanager/templates; \
|
cp -a ./templates /opt/antholume/templates; \
|
||||||
cp -a ./assets /opt/bookmanager/assets;
|
cp -a ./assets /opt/antholume/assets;
|
||||||
|
|
||||||
# Create Image
|
# Create Image
|
||||||
FROM busybox:1.36
|
FROM busybox:1.36
|
||||||
COPY --from=certs /etc/ssl/certs /etc/ssl/certs
|
COPY --from=certs /etc/ssl/certs /etc/ssl/certs
|
||||||
COPY --from=build /opt/bookmanager /opt/bookmanager
|
COPY --from=build /opt/antholume /opt/antholume
|
||||||
WORKDIR /opt/bookmanager
|
WORKDIR /opt/antholume
|
||||||
EXPOSE 8585
|
EXPOSE 8585
|
||||||
ENTRYPOINT ["/opt/bookmanager/server", "serve"]
|
ENTRYPOINT ["/opt/antholume/server", "serve"]
|
||||||
|
@ -7,7 +7,7 @@ FROM --platform=$BUILDPLATFORM golang:1.20 AS build
|
|||||||
|
|
||||||
# Create Package Directory
|
# Create Package Directory
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
RUN mkdir -p /opt/bookmanager
|
RUN mkdir -p /opt/antholume
|
||||||
|
|
||||||
# Cache Dependencies & Compile
|
# Cache Dependencies & Compile
|
||||||
ARG TARGETOS
|
ARG TARGETOS
|
||||||
@ -15,14 +15,14 @@ ARG TARGETARCH
|
|||||||
RUN --mount=target=. \
|
RUN --mount=target=. \
|
||||||
--mount=type=cache,target=/root/.cache/go-build \
|
--mount=type=cache,target=/root/.cache/go-build \
|
||||||
--mount=type=cache,target=/go/pkg \
|
--mount=type=cache,target=/go/pkg \
|
||||||
GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o /opt/bookmanager/server; \
|
GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o /opt/antholume/server; \
|
||||||
cp -a ./templates /opt/bookmanager/templates; \
|
cp -a ./templates /opt/antholume/templates; \
|
||||||
cp -a ./assets /opt/bookmanager/assets;
|
cp -a ./assets /opt/antholume/assets;
|
||||||
|
|
||||||
# Create Image
|
# Create Image
|
||||||
FROM busybox:1.36
|
FROM busybox:1.36
|
||||||
COPY --from=certs /etc/ssl/certs /etc/ssl/certs
|
COPY --from=certs /etc/ssl/certs /etc/ssl/certs
|
||||||
COPY --from=build /opt/bookmanager /opt/bookmanager
|
COPY --from=build /opt/antholume /opt/antholume
|
||||||
WORKDIR /opt/bookmanager
|
WORKDIR /opt/antholume
|
||||||
EXPOSE 8585
|
EXPOSE 8585
|
||||||
ENTRYPOINT ["/opt/bookmanager/server", "serve"]
|
ENTRYPOINT ["/opt/antholume/server", "serve"]
|
||||||
|
8
Makefile
8
Makefile
@ -11,20 +11,20 @@ build_local: build_tailwind
|
|||||||
env GOOS=darwin GOARCH=amd64 go build -o ./build/server_darwin_amd64
|
env GOOS=darwin GOARCH=amd64 go build -o ./build/server_darwin_amd64
|
||||||
|
|
||||||
docker_build_local: build_tailwind
|
docker_build_local: build_tailwind
|
||||||
docker build -t bookmanager:latest .
|
docker build -t antholume:latest .
|
||||||
|
|
||||||
docker_build_release_dev: build_tailwind
|
docker_build_release_dev: build_tailwind
|
||||||
docker buildx build \
|
docker buildx build \
|
||||||
--platform linux/amd64,linux/arm64 \
|
--platform linux/amd64,linux/arm64 \
|
||||||
-t gitea.va.reichard.io/evan/bookmanager:dev \
|
-t gitea.va.reichard.io/evan/antholume:dev \
|
||||||
-f Dockerfile-BuildKit \
|
-f Dockerfile-BuildKit \
|
||||||
--push .
|
--push .
|
||||||
|
|
||||||
docker_build_release_latest: build_tailwind
|
docker_build_release_latest: build_tailwind
|
||||||
docker buildx build \
|
docker buildx build \
|
||||||
--platform linux/amd64,linux/arm64 \
|
--platform linux/amd64,linux/arm64 \
|
||||||
-t gitea.va.reichard.io/evan/bookmanager:latest \
|
-t gitea.va.reichard.io/evan/antholume:latest \
|
||||||
-t gitea.va.reichard.io/evan/bookmanager:`git describe --tags` \
|
-t gitea.va.reichard.io/evan/antholume:`git describe --tags` \
|
||||||
-f Dockerfile-BuildKit \
|
-f Dockerfile-BuildKit \
|
||||||
--push .
|
--push .
|
||||||
|
|
||||||
|
97
README.md
97
README.md
@ -1,101 +1,92 @@
|
|||||||
# Book Manager
|
<h1 align="center">AnthoLume</h1>
|
||||||
|
<p align="center">Track and Illuminate Your Reading Journey</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/login.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/src/branch/master/screenshots/web/README.md">Web App</a> - <a href="https://gitea.va.reichard.io/evan/AnthoLume/src/branch/master/screenshots/pwa/README.md">PWA</a>
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/login.png" width="19%">
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/login.png">
|
||||||
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/login.png" width="19%">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/home.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/home.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/home.png" width="19%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/home.png" width="19%">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/documents.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/documents.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/documents.png" width="19%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/documents.png" width="19%">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/document.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/document.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/document.png" width="19%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/document.png" width="19%">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/metadata.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/metadata.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/metadata.png" width="19%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/metadata.png" width="19%">
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">Screenshots</p>
|
<p align="center"><strong><a href="https://antholume-demo.cloud.reichard.io/">Demo Server</a></strong></p>
|
||||||
|
<p align="center"><strong>user:</strong> demo <strong>pass:</strong> demo</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/src/branch/master/screenshots/web/README.md">Web App</a> - <a href="https://gitea.va.reichard.io/evan/BookManager/src/branch/master/screenshots/pwa/README.md">PWA</a>
|
<a href="https://drone.va.reichard.io/evan/AnthoLume" target="_blank">
|
||||||
</p>
|
<img src="https://drone.va.reichard.io/api/badges/evan/AnthoLume/status.svg">
|
||||||
<p align="center">
|
|
||||||
<a href="https://drone.va.reichard.io/evan/BookManager" target="_blank">
|
|
||||||
<img src="https://drone.va.reichard.io/api/badges/evan/BookManager/status.svg">
|
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**TL;DR:** Show me the [demo](https://books-demo.cloud.reichard.io/)!
|
AnthoLume is a Progressive Web App (PWA) that manages your EPUB documents, provides an EPUB reader, and tracks your reading activity! It also has a [KOReader KOSync](https://github.com/koreader/koreader-sync-server) compatible API, and a [KOReader](https://github.com/koreader/koreader) Plugin used to sync activity from your Kindle. Some additional features include:
|
||||||
|
|
||||||
- Username: `demo`
|
- OPDS API Endpoint
|
||||||
- Password: `demo`
|
- Local / Offline Reader (via ServiceWorker)
|
||||||
|
- Metadata Scraping (Thanks [OpenLibrary](https://openlibrary.org/) & [Google Books API](https://developers.google.com/books/docs/v1/getting_started))
|
||||||
|
- Words / Minute (WPM) Tracking & Leaderboard (Amongst Server Users)
|
||||||
|
|
||||||
This is BookManager! Will probably be renamed at some point. This repository contains:
|
While some features require JavaScript (Service Worker & EPUB Reader), we make an effort to limit JavaScript usage. Outside of the two aforementioned features, no JavaScript is used.
|
||||||
|
|
||||||
- Web App / Progressive Web App (PWA)
|
## Server
|
||||||
- [KOReader](https://github.com/koreader/koreader) Plugin (See `client` subfolder)
|
|
||||||
- [KOReader KOSync](https://github.com/koreader/koreader-sync-server) compatible API
|
|
||||||
- OPDS API endpoint that provides access to the uploaded documents
|
|
||||||
|
|
||||||
In additional to the compatible KOSync API's, we add:
|
Docker Image: `docker pull gitea.va.reichard.io/evan/antholume:latest`
|
||||||
|
|
||||||
- Additional APIs to automatically upload reading statistics
|
### Local / Offline Reader
|
||||||
- Upload documents to the server (can download in the "Documents" view or via OPDS)
|
|
||||||
- Book metadata scraping (Thanks [OpenLibrary](https://openlibrary.org/) & [Google Books API](https://developers.google.com/books/docs/v1/getting_started))
|
|
||||||
- Limited JavaScript use. Server-Side Rendering is used wherever possible. The main app is fully operational without any JS. JS is only required for:
|
|
||||||
- EPUB Reader
|
|
||||||
- Local / Offline Mode
|
|
||||||
- Service Worker
|
|
||||||
|
|
||||||
# Server
|
The Local / Offline reader allows you to use any AnthoLume server as a standalone offline accessible reading app! Some features:
|
||||||
|
|
||||||
Docker Image: `docker pull gitea.va.reichard.io/evan/bookmanager:latest`
|
|
||||||
|
|
||||||
## Local / Offline Reader
|
|
||||||
|
|
||||||
The Local / Offline reader allows you to use any BookManager server as a standalone offline accessible reading app! Some features:
|
|
||||||
|
|
||||||
- Add local EPUB documents
|
- Add local EPUB documents
|
||||||
- Read both local and any cached server documents
|
- Read both local and any cached server documents
|
||||||
- Maintains progress for all types of documents (server / local)
|
- Maintains progress for all types of documents (server / local)
|
||||||
- Uploads any progress or activity for cached server documents once the internet is accessible
|
- Uploads any progress or activity for cached server documents once the internet is accessible
|
||||||
|
|
||||||
## KOSync API
|
### KOSync API
|
||||||
|
|
||||||
The KOSync compatible API endpoint is located at: `http(s)://<SERVER>/api/ko`
|
The KOSync compatible API endpoint is located at: `http(s)://<SERVER>/api/ko`
|
||||||
|
|
||||||
## OPDS API
|
### OPDS API
|
||||||
|
|
||||||
The OPDS API endpoint is located at: `http(s)://<SERVER>/api/opds`
|
The OPDS API endpoint is located at: `http(s)://<SERVER>/api/opds`
|
||||||
|
|
||||||
## Quick Start
|
### Quick Start
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Make Data Directory
|
# Make Data Directory
|
||||||
mkdir -p bookmanager_data
|
mkdir -p antholume_data
|
||||||
|
|
||||||
# Run Server
|
# Run Server
|
||||||
docker run \
|
docker run \
|
||||||
-p 8585:8585 \
|
-p 8585:8585 \
|
||||||
-e REGISTRATION_ENABLED=true \
|
-e REGISTRATION_ENABLED=true \
|
||||||
-v ./bookmanager_data:/config \
|
-v ./antholume_data:/config \
|
||||||
-v ./bookmanager_data:/data \
|
-v ./antholume_data:/data \
|
||||||
gitea.va.reichard.io/evan/bookmanager:latest
|
gitea.va.reichard.io/evan/antholume:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
The service is now accessible at: `http://localhost:8585`. I recommend registering an account and then disabling registration unless you expect more users.
|
The service is now accessible at: `http://localhost:8585`. I recommend registering an account and then disabling registration unless you expect more users.
|
||||||
|
|
||||||
## Configuration
|
### Configuration
|
||||||
|
|
||||||
| Environment Variable | Default Value | Description |
|
| Environment Variable | Default Value | Description |
|
||||||
| -------------------- | ------------- | ------------------------------------------------------------------- |
|
| -------------------- | ------------- | ------------------------------------------------------------------- |
|
||||||
| DATABASE_TYPE | SQLite | Currently only "SQLite" is supported |
|
| DATABASE_TYPE | SQLite | Currently only "SQLite" is supported |
|
||||||
| DATABASE_NAME | book_manager | The database name, or in SQLite's case, the filename |
|
| DATABASE_NAME | antholume | The database name, or in SQLite's case, the filename |
|
||||||
| CONFIG_PATH | /config | Directory where to store SQLite's DB |
|
| CONFIG_PATH | /config | Directory where to store SQLite's DB |
|
||||||
| DATA_PATH | /data | Directory where to store the documents and cover metadata |
|
| DATA_PATH | /data | Directory where to store the documents and cover metadata |
|
||||||
| LISTEN_PORT | 8585 | Port the server listens at |
|
| LISTEN_PORT | 8585 | Port the server listens at |
|
||||||
@ -118,11 +109,11 @@ The service is now accessible at: `http://localhost:8585`. I recommend registeri
|
|||||||
- The native KOSync plugin sends an MD5 hash of the password. Due to that:
|
- The native KOSync plugin sends an MD5 hash of the password. Due to that:
|
||||||
- We store an Argon2 hash _and_ per-password salt of the MD5 hashed original password
|
- We store an Argon2 hash _and_ per-password salt of the MD5 hashed original password
|
||||||
|
|
||||||
# Client (KOReader Plugin)
|
## Client (KOReader Plugin)
|
||||||
|
|
||||||
See documentation in the `client` subfolder: [SyncNinja](https://gitea.va.reichard.io/evan/BookManager/src/branch/master/client/)
|
See documentation in the `client` subfolder: [SyncNinja](https://gitea.va.reichard.io/evan/AnthoLume/src/branch/master/client/)
|
||||||
|
|
||||||
# Development
|
## Development
|
||||||
|
|
||||||
SQLC Generation (v1.21.0):
|
SQLC Generation (v1.21.0):
|
||||||
|
|
||||||
@ -137,7 +128,7 @@ Run Development:
|
|||||||
CONFIG_PATH=./data DATA_PATH=./data REGISTRATION_ENABLED=true go run main.go serve
|
CONFIG_PATH=./data DATA_PATH=./data REGISTRATION_ENABLED=true go run main.go serve
|
||||||
```
|
```
|
||||||
|
|
||||||
# Building
|
## Building
|
||||||
|
|
||||||
The `Dockerfile` and `Makefile` contain the build information:
|
The `Dockerfile` and `Makefile` contain the build information:
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ func (api *API) opdsDocuments(c *gin.Context) {
|
|||||||
// TODO
|
// TODO
|
||||||
// Links: []opds.Link{
|
// Links: []opds.Link{
|
||||||
// {
|
// {
|
||||||
// Title: "Search Book Manager",
|
// Title: "Search AnthoLume",
|
||||||
// Rel: "search",
|
// Rel: "search",
|
||||||
// TypeLink: "application/opensearchdescription+xml",
|
// TypeLink: "application/opensearchdescription+xml",
|
||||||
// Href: "search.xml",
|
// Href: "search.xml",
|
||||||
@ -105,8 +105,8 @@ func (api *API) opdsDocuments(c *gin.Context) {
|
|||||||
|
|
||||||
func (api *API) opdsSearchDescription(c *gin.Context) {
|
func (api *API) opdsSearchDescription(c *gin.Context) {
|
||||||
rawXML := `<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
rawXML := `<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
||||||
<ShortName>Search Book Manager</ShortName>
|
<ShortName>Search AnthoLume</ShortName>
|
||||||
<Description>Search Book Manager</Description>
|
<Description>Search AnthoLume</Description>
|
||||||
<Url type="application/atom+xml;profile=opds-catalog;kind=acquisition" template="./search?query={searchTerms}"/>
|
<Url type="application/atom+xml;profile=opds-catalog;kind=acquisition" template="./search?query={searchTerms}"/>
|
||||||
</OpenSearchDescription>`
|
</OpenSearchDescription>`
|
||||||
c.Data(http.StatusOK, "application/xml", []byte(rawXML))
|
c.Data(http.StatusOK, "application/xml", []byte(rawXML))
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
media="(prefers-color-scheme: dark)"
|
media="(prefers-color-scheme: dark)"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<title>Book Manager - Local</title>
|
<title>AnthoLume - Local</title>
|
||||||
|
|
||||||
<link rel="manifest" href="/manifest.json" />
|
<link rel="manifest" href="/manifest.json" />
|
||||||
<link rel="stylesheet" href="/assets/style.css" />
|
<link rel="stylesheet" href="/assets/style.css" />
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"short_name": "Book Manager",
|
"short_name": "AnthoLume",
|
||||||
"name": "Book Manager",
|
"name": "AnthoLume",
|
||||||
"theme_color": "#1F2937",
|
"theme_color": "#1F2937",
|
||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"scope": "/",
|
"scope": "/",
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
/>
|
/>
|
||||||
<meta name="theme-color" content="#D2B48C" />
|
<meta name="theme-color" content="#D2B48C" />
|
||||||
|
|
||||||
<title>Book Manager - Reader</title>
|
<title>AnthoLume - Reader</title>
|
||||||
|
|
||||||
<link rel="manifest" href="/manifest.json" />
|
<link rel="manifest" href="/manifest.json" />
|
||||||
<link rel="stylesheet" href="/assets/style.css" />
|
<link rel="stylesheet" href="/assets/style.css" />
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Book Manager - SyncNinja KOReader Plugin
|
# AnthoLume - SyncNinja KOReader Plugin
|
||||||
|
|
||||||
This is BookManagers KOReader Plugin called `syncninja.koplugin`. Features include:
|
This is AnthoLume's KOReader Plugin called `syncninja.koplugin`. Features include:
|
||||||
|
|
||||||
- Syncing read activity
|
- Syncing read activity
|
||||||
- Uploading documents
|
- Uploading documents
|
||||||
@ -12,10 +12,10 @@ Copy the `syncninja.koplugin` directory to the `plugins` directory for your KORe
|
|||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
You must configure the BookManager server and credentials in SyncNinja. Afterwhich you'll have the ability to configure the sync cadence as well as whether you'd like the plugin to sync your activity, document metadata, and/or documents themselves.
|
You must configure the AnthoLume server and credentials in SyncNinja. Afterwhich you'll have the ability to configure the sync cadence as well as whether you'd like the plugin to sync your activity, document metadata, and/or documents themselves.
|
||||||
|
|
||||||
## KOSync Compatibility
|
## KOSync Compatibility
|
||||||
|
|
||||||
BookManager implements API's compatible with the KOSync plugin. This means that you can utilize this server for KOSync (and it's recommended!). SyncNinja provides an easy way to merge configurations between both KOSync and itself in the menu.
|
AnthoLume implements API's compatible with the KOSync plugin. This means that you can utilize this server for KOSync (and it's recommended!). SyncNinja provides an easy way to merge configurations between both KOSync and itself in the menu.
|
||||||
|
|
||||||
The KOSync compatible API endpoint is located at: `http(s)://<SERVER>/api/ko`. You can either use the previous mentioned merge feature to automatically configure KOSync once SyncNinja is configured, or you can manually set KOSync's server to the above.
|
The KOSync compatible API endpoint is located at: `http(s)://<SERVER>/api/ko`. You can either use the previous mentioned merge feature to automatically configure KOSync once SyncNinja is configured, or you can manually set KOSync's server to the above.
|
||||||
|
@ -33,7 +33,7 @@ func Load() *Config {
|
|||||||
return &Config{
|
return &Config{
|
||||||
Version: "0.0.2",
|
Version: "0.0.2",
|
||||||
DBType: trimLowerString(getEnv("DATABASE_TYPE", "SQLite")),
|
DBType: trimLowerString(getEnv("DATABASE_TYPE", "SQLite")),
|
||||||
DBName: trimLowerString(getEnv("DATABASE_NAME", "book_manager")),
|
DBName: trimLowerString(getEnv("DATABASE_NAME", "antholume")),
|
||||||
ConfigPath: getEnv("CONFIG_PATH", "/config"),
|
ConfigPath: getEnv("CONFIG_PATH", "/config"),
|
||||||
DataPath: getEnv("DATA_PATH", "/data"),
|
DataPath: getEnv("DATA_PATH", "/data"),
|
||||||
ListenPort: getEnv("LISTEN_PORT", "8585"),
|
ListenPort: getEnv("LISTEN_PORT", "8585"),
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
services:
|
services:
|
||||||
bookmanager:
|
antholume:
|
||||||
environment:
|
environment:
|
||||||
- CONFIG_PATH=/data
|
- CONFIG_PATH=/data
|
||||||
- DATA_PATH=/data
|
- DATA_PATH=/data
|
||||||
|
6
main.go
6
main.go
@ -24,13 +24,13 @@ func main() {
|
|||||||
log.SetFormatter(UTCFormatter{&log.TextFormatter{FullTimestamp: true}})
|
log.SetFormatter(UTCFormatter{&log.TextFormatter{FullTimestamp: true}})
|
||||||
|
|
||||||
app := &cli.App{
|
app := &cli.App{
|
||||||
Name: "Book Manager",
|
Name: "AnthoLume",
|
||||||
Usage: "A self hosted e-book progress tracker.",
|
Usage: "A self hosted e-book progress tracker.",
|
||||||
Commands: []*cli.Command{
|
Commands: []*cli.Command{
|
||||||
{
|
{
|
||||||
Name: "serve",
|
Name: "serve",
|
||||||
Aliases: []string{"s"},
|
Aliases: []string{"s"},
|
||||||
Usage: "Start Book Manager web server.",
|
Usage: "Start AnthoLume web server.",
|
||||||
Action: cmdServer,
|
Action: cmdServer,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -42,7 +42,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func cmdServer(ctx *cli.Context) error {
|
func cmdServer(ctx *cli.Context) error {
|
||||||
log.Info("Starting Book Manager Server")
|
log.Info("Starting AnthoLume Server")
|
||||||
|
|
||||||
// Create Channel
|
// Create Channel
|
||||||
wg := sync.WaitGroup{}
|
wg := sync.WaitGroup{}
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
# Notes
|
# Notes
|
||||||
|
|
||||||
This folder consists of various notes / files that I want to save and may come back to at some point.
|
This folder consists of various notes / files that I want to save and may come back to at some point.
|
||||||
|
|
||||||
|
# Ideas / To Do
|
||||||
|
|
||||||
|
- Rename!
|
||||||
|
- Google Fonts -> SW Cache and/or Local
|
||||||
|
- Search Documents
|
||||||
|
- Title, Author, Description
|
||||||
|
- Change Device Name / Assume Device
|
||||||
|
- Hide Document per User (Another Table?)
|
||||||
|
- Admin User?
|
||||||
|
- Reset Passwords
|
||||||
|
- Actually Delete Documents
|
||||||
|
- Document & Activity Pagination
|
||||||
|
@ -1,25 +1,25 @@
|
|||||||
# PWA Screenshots
|
# PWA Screenshots
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/login.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/login.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/login.png" width="32%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/login.png" width="32%">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/home.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/home.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/home.png" width="32%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/home.png" width="32%">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/activity.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/activity.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/activity.png" width="32%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/activity.png" width="32%">
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/documents.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/documents.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/documents.png" width="32%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/documents.png" width="32%">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/document.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/document.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/document.png" width="32%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/document.png" width="32%">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/metadata.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/metadata.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/pwa/metadata.png" width="32%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/pwa/metadata.png" width="32%">
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1,28 +1,28 @@
|
|||||||
# Web Screenshots
|
# Web Screenshots
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/login.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/login.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/login.png" width="49%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/login.png" width="49%">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/home.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/home.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/home.png" width="49%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/home.png" width="49%">
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/activity.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/activity.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/activity.png" width="49%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/activity.png" width="49%">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/documents.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/documents.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/documents.png" width="49%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/documents.png" width="49%">
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/document.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/document.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/document.png" width="49%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/document.png" width="49%">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/metadata.png">
|
<a href="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/metadata.png">
|
||||||
<img src="https://gitea.va.reichard.io/evan/BookManager/raw/branch/master/screenshots/web/metadata.png" width="49%">
|
<img src="https://gitea.va.reichard.io/evan/AnthoLume/raw/branch/master/screenshots/web/metadata.png" width="49%">
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
@ -4,5 +4,6 @@ pkgs.mkShell {
|
|||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
go
|
go
|
||||||
nodePackages.tailwindcss
|
nodePackages.tailwindcss
|
||||||
|
python311Packages.grip
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<meta name="theme-color" content="#F3F4F6" media="(prefers-color-scheme: light)">
|
<meta name="theme-color" content="#F3F4F6" media="(prefers-color-scheme: light)">
|
||||||
<meta name="theme-color" content="#1F2937" media="(prefers-color-scheme: dark)">
|
<meta name="theme-color" content="#1F2937" media="(prefers-color-scheme: dark)">
|
||||||
|
|
||||||
<title>Book Manager - {{block "title" .}}{{end}}</title>
|
<title>AnthoLume - {{block "title" .}}{{end}}</title>
|
||||||
|
|
||||||
<link rel="manifest" href="/manifest.json" />
|
<link rel="manifest" href="/manifest.json" />
|
||||||
<link rel="stylesheet" href="/assets/style.css">
|
<link rel="stylesheet" href="/assets/style.css">
|
||||||
@ -134,7 +134,7 @@
|
|||||||
|
|
||||||
<div id="menu" class="fixed -ml-6 h-full w-56 lg:w-48 bg-white dark:bg-gray-700 shadow-lg">
|
<div id="menu" class="fixed -ml-6 h-full w-56 lg:w-48 bg-white dark:bg-gray-700 shadow-lg">
|
||||||
<div class="h-16 flex justify-end lg:justify-around">
|
<div class="h-16 flex justify-end lg:justify-around">
|
||||||
<p class="text-xl font-bold dark:text-white text-right my-auto pr-4 lg:pr-0">Book Manager</p>
|
<p class="text-xl font-bold dark:text-white text-right my-auto pr-4 lg:pr-0">AnthoLume</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-6">
|
<div class="mt-6">
|
||||||
<a
|
<a
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
media="(prefers-color-scheme: dark)"
|
media="(prefers-color-scheme: dark)"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<title>Book Manager - Error</title>
|
<title>AnthoLume - Error</title>
|
||||||
|
|
||||||
<link rel="manifest" href="/manifest.json" />
|
<link rel="manifest" href="/manifest.json" />
|
||||||
<link rel="stylesheet" href="/assets/style.css" />
|
<link rel="stylesheet" href="/assets/style.css" />
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
media="(prefers-color-scheme: dark)"
|
media="(prefers-color-scheme: dark)"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<title>Book Manager - {{if .Register}}Register{{else}}Login{{end}}</title>
|
<title>AnthoLume - {{if .Register}}Register{{else}}Login{{end}}</title>
|
||||||
|
|
||||||
<link rel="manifest" href="./manifest.json" />
|
<link rel="manifest" href="./manifest.json" />
|
||||||
<link rel="stylesheet" href="./assets/style.css" />
|
<link rel="stylesheet" href="./assets/style.css" />
|
||||||
|
Loading…
Reference in New Issue
Block a user