feat: shioriko is now phoebe

This commit is contained in:
Damillora 2025-02-24 13:50:43 +00:00
parent 1e1da493f2
commit 0854628c4e
35 changed files with 194 additions and 91 deletions

View File

@ -48,7 +48,7 @@ jobs:
name: Upload Binaries
uses: actions/upload-artifact@v4
with:
name: shioriko-${{ env.PLATFORM }}
name: phoebe-${{ env.PLATFORM }}
path: ./output
retention-days: 7
-
@ -59,7 +59,7 @@ jobs:
with:
push: true
platforms: ${{ matrix.platform }}
tags: damillora/shioriko:main
tags: damillora/phoebe:main
-
name: Build and push (Tagged)
if: env.IS_LINUX == 'true' && env.IS_RELEASE == 'true'
@ -68,7 +68,7 @@ jobs:
with:
push: true
platforms: ${{ matrix.platform }}
tags: damillora/shioriko:${{ env.GIT_TAG }}, damillora/shioriko:latest
tags: damillora/phoebe:${{ env.GIT_TAG }}, damillora/phoebe:latest
-
name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}

View File

@ -7,14 +7,14 @@ RUN npm ci && npm run build
# Go application
FROM golang:1.23-alpine AS build
WORKDIR /go/src/shioriko
WORKDIR /go/src/phoebe
COPY . .
COPY --from=node_build /src/pkg/web/build/ /go/src/shioriko/pkg/web/build/
COPY --from=node_build /src/pkg/web/build/ /go/src/phoebe/pkg/web/build/
RUN go get -d -v ./...
RUN CGO_ENABLED=0 GOOS=linux go build -o /shioriko -ldflags '-extldflags "-static"' -tags timetzdata
RUN CGO_ENABLED=0 GOOS=linux go build -o /phoebe -ldflags '-extldflags "-static"' -tags timetzdata
FROM scratch AS runtime
WORKDIR /app
COPY --from=build /shioriko /app/
COPY --from=build /phoebe /app/
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
ENTRYPOINT ["/app/shioriko"]
ENTRYPOINT ["/app/phoebe"]

View File

@ -1,8 +1,10 @@
# shioriko
# phoebe
![project logo](./phoebe-logo.svg)
a booru-style image gallery and organizer.
Built with the Go language and Svelte framework, shioriko is designed for personal image gathering.
Built with the Go language and Svelte framework, phoebe is designed for personal image gathering.
## Features
* Upload and organize images
@ -14,8 +16,8 @@ Built with the Go language and Svelte framework, shioriko is designed for person
The easiest way to get started is to use Docker:
```bash
docker pull damillora/shioriko
docker run -e POSTGRES_DATABASE=<PostgreSQL DSN> -e AUTH_SECRET=<secret> -e DATA_DIR=/data -e BASE_URL=http://localhost:8080 -p 8080:8080 -v "./data:/data" damillora/shioriko
docker pull damillora/phoebe
docker run -e POSTGRES_DATABASE=<PostgreSQL DSN> -e AUTH_SECRET=<secret> -e DATA_DIR=/data -e BASE_URL=http://localhost:8080 -p 8080:8080 -v "./data:/data" damillora/phoebe
```
## Requirements
@ -24,7 +26,7 @@ docker run -e POSTGRES_DATABASE=<PostgreSQL DSN> -e AUTH_SECRET=<secret> -e DATA
## Configuration
Shioriko is configured using environment variables:
phoebe is configured using environment variables:
* `POSTGRES_DATABASE`: DSN string of Postgres Database, see [Gorm documentation](https://gorm.io/docs/connecting_to_the_database.html)
* `AUTH_SECRET`: Secret used to sign JWTs
@ -33,7 +35,7 @@ Shioriko is configured using environment variables:
* `DISABLE_REGISTRATION`: Optional, disable registration on the instance
## Contributing
Shioriko is still in an early stage, but contributions are welcome!
phoebe is still in an early stage, but contributions are welcome!
## License
shioriko is licensed under the [MIT license](https://choosealicense.com/licenses/mit/).
phoebe is licensed under the [MIT license](https://choosealicense.com/licenses/mit/).

2
go.mod
View File

@ -1,4 +1,4 @@
module github.com/Damillora/Shioriko
module github.com/Damillora/phoebe
go 1.21.0

View File

@ -1,7 +1,7 @@
package main
import (
"github.com/Damillora/Shioriko/pkg/app"
"github.com/Damillora/phoebe/pkg/app"
)
func main() {

33
phoebe-logo.svg Normal file
View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
<g transform="matrix(1,0,0,1,27.7829,6.61499)">
<g transform="matrix(0.929615,0,0,0.929615,31.3145,2.05741)">
<circle cx="487.194" cy="541.437" r="249.054" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:10.76px;"/>
</g>
<g transform="matrix(-1.30841,0,0,1.30007,1102.19,-19.8909)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(-8.01173e-17,-1.30841,-1.30007,7.96064e-17,1009.49,1123.36)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(-8.01173e-17,1.30841,1.30007,7.96064e-17,-41.0588,-112.593)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(1.30841,-1.60235e-16,-1.59213e-16,-1.30007,-133.76,1030.66)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(0.925189,-0.925189,-0.919289,-0.919289,418.667,1313.79)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(-0.925189,0.925189,0.919289,0.919289,549.767,-303.017)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(0.846242,0.99791,0.991546,-0.840845,-316.092,373.794)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(-0.925189,-0.925189,-0.919289,0.919289,1292.62,570.935)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -5,9 +5,9 @@ import (
"net/http"
"os"
"github.com/Damillora/Shioriko/pkg/config"
"github.com/Damillora/Shioriko/pkg/database"
"github.com/Damillora/Shioriko/pkg/web"
"github.com/Damillora/phoebe/pkg/config"
"github.com/Damillora/phoebe/pkg/database"
"github.com/Damillora/phoebe/pkg/web"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)

View File

@ -3,10 +3,10 @@ package app
import (
"net/http"
"github.com/Damillora/Shioriko/pkg/database"
"github.com/Damillora/Shioriko/pkg/middleware"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/Shioriko/pkg/services"
"github.com/Damillora/phoebe/pkg/database"
"github.com/Damillora/phoebe/pkg/middleware"
"github.com/Damillora/phoebe/pkg/models"
"github.com/Damillora/phoebe/pkg/services"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
)

View File

@ -14,11 +14,11 @@ import (
"golang.org/x/image/draw"
_ "golang.org/x/image/webp"
"github.com/Damillora/Shioriko/pkg/config"
"github.com/Damillora/Shioriko/pkg/database"
"github.com/Damillora/Shioriko/pkg/middleware"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/Shioriko/pkg/services"
"github.com/Damillora/phoebe/pkg/config"
"github.com/Damillora/phoebe/pkg/database"
"github.com/Damillora/phoebe/pkg/middleware"
"github.com/Damillora/phoebe/pkg/models"
"github.com/Damillora/phoebe/pkg/services"
"github.com/corona10/goimagehash"
"github.com/gin-gonic/gin"
"github.com/google/uuid"

View File

@ -5,10 +5,10 @@ import (
"strconv"
"strings"
"github.com/Damillora/Shioriko/pkg/database"
"github.com/Damillora/Shioriko/pkg/middleware"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/Shioriko/pkg/services"
"github.com/Damillora/phoebe/pkg/database"
"github.com/Damillora/phoebe/pkg/middleware"
"github.com/Damillora/phoebe/pkg/models"
"github.com/Damillora/phoebe/pkg/services"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
)

View File

@ -3,9 +3,9 @@ package app
import (
"net/http"
"github.com/Damillora/Shioriko/pkg/middleware"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/Shioriko/pkg/services"
"github.com/Damillora/phoebe/pkg/middleware"
"github.com/Damillora/phoebe/pkg/models"
"github.com/Damillora/phoebe/pkg/services"
"github.com/gin-gonic/gin"
)

View File

@ -4,9 +4,9 @@ import (
"net/http"
"strconv"
"github.com/Damillora/Shioriko/pkg/middleware"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/Shioriko/pkg/services"
"github.com/Damillora/phoebe/pkg/middleware"
"github.com/Damillora/phoebe/pkg/models"
"github.com/Damillora/phoebe/pkg/services"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
)

View File

@ -3,11 +3,11 @@ package app
import (
"net/http"
"github.com/Damillora/Shioriko/pkg/config"
"github.com/Damillora/Shioriko/pkg/database"
"github.com/Damillora/Shioriko/pkg/middleware"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/Shioriko/pkg/services"
"github.com/Damillora/phoebe/pkg/config"
"github.com/Damillora/phoebe/pkg/database"
"github.com/Damillora/phoebe/pkg/middleware"
"github.com/Damillora/phoebe/pkg/models"
"github.com/Damillora/phoebe/pkg/services"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
)

View File

@ -3,7 +3,7 @@ package database
import (
"log"
"github.com/Damillora/Shioriko/pkg/config"
"github.com/Damillora/phoebe/pkg/config"
"github.com/google/uuid"
"gorm.io/gorm"

View File

@ -3,8 +3,8 @@ package middleware
import (
"strings"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/Shioriko/pkg/services"
"github.com/Damillora/phoebe/pkg/models"
"github.com/Damillora/phoebe/pkg/services"
"github.com/gin-gonic/gin"
)

View File

@ -4,8 +4,8 @@ import (
"errors"
"time"
"github.com/Damillora/Shioriko/pkg/config"
"github.com/Damillora/Shioriko/pkg/database"
"github.com/Damillora/phoebe/pkg/config"
"github.com/Damillora/phoebe/pkg/database"
"github.com/dgrijalva/jwt-go"
"golang.org/x/crypto/bcrypt"
)
@ -24,9 +24,9 @@ func CreateToken(user *database.User) string {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"email": user.Email,
"name": user.Username,
"iss": "shioriko-api",
"iss": "phoebe-api",
"sub": user.ID,
"aud": "shioriko",
"aud": "phoebe",
"exp": time.Now().Add(time.Hour * 24).Unix(),
})
jwtToken, _ := token.SignedString([]byte(config.CurrentConfig.AuthSecret))

View File

@ -3,8 +3,8 @@ package services
import (
"encoding/binary"
"github.com/Damillora/Shioriko/pkg/database"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/phoebe/pkg/database"
"github.com/Damillora/phoebe/pkg/models"
"github.com/corona10/goimagehash"
)

View File

@ -4,8 +4,8 @@ import (
"fmt"
"strings"
"github.com/Damillora/Shioriko/pkg/database"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/phoebe/pkg/database"
"github.com/Damillora/phoebe/pkg/models"
"github.com/google/uuid"
)

View File

@ -5,8 +5,8 @@ import (
"fmt"
"strings"
"github.com/Damillora/Shioriko/pkg/database"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/phoebe/pkg/database"
"github.com/Damillora/phoebe/pkg/models"
"github.com/google/uuid"
)

View File

@ -1,8 +1,8 @@
package services
import (
"github.com/Damillora/Shioriko/pkg/database"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/phoebe/pkg/database"
"github.com/Damillora/phoebe/pkg/models"
)
func GetTagTypeAll() []database.TagType {

View File

@ -1,8 +1,8 @@
package services
import (
"github.com/Damillora/Shioriko/pkg/database"
"github.com/Damillora/Shioriko/pkg/models"
"github.com/Damillora/phoebe/pkg/database"
"github.com/Damillora/phoebe/pkg/models"
"github.com/google/uuid"
"golang.org/x/crypto/bcrypt"
)
@ -56,12 +56,10 @@ func UpdateUserProfile(id string, model models.UserUpdateModel) (*database.User,
return &user, nil
}
func UpdateUserPassword(id string, model models.UserUpdatePasswordModel) (*database.User, error) {
var user database.User
result := database.DB.Where("id = ?", id).First(&user)
if user.Password != "" {
verifyErr := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(model.OldPassword))
if verifyErr != nil {

View File

@ -1,15 +1,16 @@
{
"name": "Shioriko",
"version": "0.0.1",
"name": "phoebe",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "Shioriko",
"version": "0.0.1",
"name": "phoebe",
"version": "0.1.0",
"dependencies": {
"axios": "^1.4.0",
"bulma": "^1.0.3",
"child_process": "^1.0.2",
"date-fns": "^4.1.0",
"query-string": "^8.1.0"
},
@ -1744,6 +1745,12 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/child_process": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz",
"integrity": "sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g==",
"license": "ISC"
},
"node_modules/chokidar": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",

View File

@ -1,6 +1,6 @@
{
"name": "Shioriko",
"version": "0.0.1",
"name": "phoebe",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "vite dev",
@ -30,6 +30,7 @@
"dependencies": {
"axios": "^1.4.0",
"bulma": "^1.0.3",
"child_process": "^1.0.2",
"date-fns": "^4.1.0",
"query-string": "^8.1.0"
}

View File

@ -3,7 +3,7 @@
// Path to Bulma's sass folder
@use "../node_modules/bulma/sass/" as * with (
$family-primary: '"Nunito", sans-serif',
$primary: #37b484,
$primary: #4c94e8,
);
// Import the Google Font
@import "https://fonts.googleapis.com/css?family=Nunito:400,700";

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
<g transform="matrix(1,0,0,1,27.7829,6.61499)">
<g transform="matrix(0.929615,0,0,0.929615,31.3145,2.05741)">
<circle cx="487.194" cy="541.437" r="249.054" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:10.76px;"/>
</g>
<g transform="matrix(-1.30841,0,0,1.30007,1102.19,-19.8909)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(-8.01173e-17,-1.30841,-1.30007,7.96064e-17,1009.49,1123.36)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(-8.01173e-17,1.30841,1.30007,7.96064e-17,-41.0588,-112.593)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(1.30841,-1.60235e-16,-1.59213e-16,-1.30007,-133.76,1030.66)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(0.925189,-0.925189,-0.919289,-0.919289,418.667,1313.79)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(-0.925189,0.925189,0.919289,0.919289,549.767,-303.017)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(0.846242,0.99791,0.991546,-0.840845,-316.092,373.794)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
<g transform="matrix(-0.925189,-0.925189,-0.919289,0.919289,1292.62,570.935)">
<path d="M497.447,61.6C497.447,54.619 491.815,48.951 484.879,48.951L459.742,48.951C452.805,48.951 447.173,54.619 447.173,61.6L447.173,184.477C447.173,191.459 452.805,197.127 459.742,197.127L484.879,197.127C491.815,197.127 497.447,191.459 497.447,184.477L497.447,61.6Z" style="fill:rgb(255,221,15);stroke:rgb(74,148,232);stroke-width:7.67px;"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,12 @@
<script>
import { version } from '$app/environment';
</script>
<footer class="footer">
<div class="content has-text-centered">
<p>
<strong><a href="https://github.com/Damillora/phoebe">phoebe</a></strong>: a booru-style image gallery and organizer
</p>
<p>version {version}</p>
</div>
</footer>

View File

@ -1,4 +1,5 @@
<script>
import logo from "$lib/assets/phoebe-logo.svg";
import { token } from "$lib/stores";
import { isTokenExpired, getUsernameFromToken } from "$lib/login-check";
@ -19,7 +20,8 @@
<nav class="navbar is-primary" aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item" href="/">
<strong>shioriko</strong>
<img class="image is-32x32" alt="phoebe logo" src={logo} />
<strong>phoebe</strong>
</a>
<a

View File

@ -1,6 +1,6 @@
<script lang="ts">
import { onMount } from "svelte";
import ShiorikoImage from "./ShiorikoImage.svelte";
import ImageView from "./ImageView.svelte";
let { posts = [] } = $props();
</script>
@ -13,7 +13,7 @@
<div class="card-image">
<figure class="image">
<a href="/post/{post.id}">
<ShiorikoImage alt={post.id} src={post.thumbnail_path} />
<ImageView alt={post.id} src={post.thumbnail_path} />
</a>
</figure>
</div>

View File

@ -1,6 +1,7 @@
<script lang="ts">
import "../app.scss";
import Navbar from "$lib/components/ui/Navbar.svelte";
import Footer from "$lib/components/ui/Footer.svelte";
interface Props {
children?: import('svelte').Snippet;
}
@ -9,17 +10,11 @@
</script>
<svelte:head>
<title>Shioriko</title>
<title>phoebe</title>
</svelte:head>
<Navbar />
{@render children?.()}
<footer class="footer">
<div class="content has-text-centered">
<p>
<strong><a href="https://github.com/Damillora/Shioriko">shioriko</a></strong>: a booru-style image gallery and organizer
</p>
</div>
</footer>
<Footer />

View File

@ -1,5 +1,6 @@
<script lang="ts">
import Tags from "svelte-tags-input";
import logo from "$lib/assets/phoebe-logo.svg";
import { getPostCount, getPosts, getTagAutocomplete } from "$lib/api";
import { goto } from "$app/navigation";
@ -43,8 +44,13 @@
<div class="container">
<div class="columns is-centered">
<div class="column is-12-tablet is-8-desktop is-8-widescreen">
<div class="block is-flex is-justify-content-center">
<figure class="image is-128x128">
<img alt="phoebe logo" src={logo} />
</figure>
</div>
<div class="block has-text-centered">
<p class="title">shioriko</p>
<p class="title">phoebe</p>
<p class="subtitle">a booru-style image gallery and organizer</p>
</div>
<div class="box has-text-centered">
@ -71,9 +77,15 @@
</form>
</div>
{#if postCountLoaded}
<p class="block">serving <span class="is-primary"><strong>{postCount}</strong></span> images</p>
<p class="block">
serving <span class="is-primary"
><strong>{postCount}</strong></span
> images
</p>
{:else}
<p class="block">serving <span class="is-primary"><strong>...</strong></span> images</p>
<p class="block">
serving <span class="is-primary"><strong>...</strong></span> images
</p>
{/if}
</div>
</div>

View File

@ -1,7 +1,7 @@
<script>
import { getTagAutocomplete, searchBlob } from "$lib/api";
import PostGallery from "$lib/components/ui/PostGallery.svelte";
import ShiorikoImage from "$lib/components/ui/ShiorikoImage.svelte";
import ImageView from "$lib/components/ui/ImageView.svelte";
import { paginate } from "$lib/simple-pagination";
let currentProgress = $state(0);

View File

@ -6,7 +6,7 @@
import ViewPostPanel from "$lib/components/panels/ViewPostPanel.svelte";
import { page } from "$app/stores";
import ShiorikoImage from "$lib/components/ui/ShiorikoImage.svelte";
import ImageView from "$lib/components/ui/ImageView.svelte";
import AuthCheck from "$lib/components/checks/AuthCheck.svelte";
import DeletePostPanel from "$lib/components/panels/DeletePostPanel.svelte";
const { id } = $page.params;
@ -122,7 +122,7 @@
</div>
<div class="box">
<figure class="image">
<ShiorikoImage
<ImageView
alt={post.id}
src={post.preview_path}
/>
@ -134,7 +134,7 @@
</div>
<div class="box">
<figure class="image">
<ShiorikoImage
<ImageView
alt={post.id}
src={post.image_path}
/>

View File

@ -3,7 +3,7 @@
import { goto } from "$app/navigation";
import Tags from "svelte-tags-input";
import AuthRequired from "$lib/components/checks/AuthRequired.svelte";
import ShiorikoImage from "$lib/components/ui/ShiorikoImage.svelte";
import ImageView from "$lib/components/ui/ImageView.svelte";
let currentProgress = $state(0);
@ -188,7 +188,7 @@
{#if fileName}
<div class="box">
<figure class="image">
<ShiorikoImage alt={fileName} src={previewUrl} />
<ImageView alt={fileName} src={previewUrl} />
</figure>
</div>
{:else if loading && !(currentProgress > 0 && currentProgress < 100)}

View File

@ -1,6 +1,9 @@
import adapter from "@sveltejs/adapter-static";
import { execSync } from "child_process";
import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
const commit = execSync('git rev-parse HEAD').toString().trim().substring(0, 7);
/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
@ -13,7 +16,12 @@ const config = {
// See https://kit.svelte.dev/docs/adapters for more information about adapters.
adapter: adapter({
fallback: 'app.html', // may differ from host to host
})
}),
version: {
name: `${process.env.npm_package_version}-${commit}`,
}
},
};