110 Commits

Author SHA1 Message Date
7b892dcfc0 Update dependency svelte to v5.25.8 2025-04-07 17:03:43 +00:00
ngn
b312e40204 use the correct package manager
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 36s
Signed-off-by: ngn <ngn@ngn.tf>
2025-04-07 06:04:34 +03:00
ngn
a67bd74ced fix dockerfile by adding required build programs
Some checks failed
Build the docker image for the frontend application / build (push) Failing after 10s
Signed-off-by: ngn <ngn@ngn.tf>
2025-04-07 06:03:00 +03:00
ngn
9a72d3f95d dump nerdfonts from the website to use locally
Some checks failed
Build the docker image for the frontend application / build (push) Failing after 20s
Signed-off-by: ngn <ngn@ngn.tf>
2025-04-07 05:58:46 +03:00
ngn
66c96ae312 update the example compose file
Signed-off-by: ngn <ngn@ngn.tf>
2025-04-07 05:16:56 +03:00
ngn
f779a03ae5 update app dockerfile to include new envs
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 35s
Signed-off-by: ngn <ngn@ngn.tf>
2025-04-07 05:12:08 +03:00
ngn
bcb48d789b update the app URL env var name in API config
All checks were successful
Build the docker image for the API / build (push) Successful in 2m18s
Signed-off-by: ngn <ngn@ngn.tf>
2025-04-07 04:57:29 +03:00
ngn
aa69525912 Merge branch 'main' of https://git.ngn.tf/ngn/website
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 44s
2025-04-07 04:49:00 +03:00
ngn
0134bd2ab1 add env vars for configuring onion and I2P urls
Signed-off-by: ngn <ngn@ngn.tf>
2025-04-07 04:46:47 +03:00
ngn
84e477b23e Merge pull request 'Update dependency dompurify to v3.2.5' (#43) from renovate/dompurify-3.x-lockfile into main
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 35s
Reviewed-on: #43
2025-04-06 00:05:18 +03:00
515dcf6a09 Update dependency dompurify to v3.2.5 2025-04-05 21:03:17 +00:00
ngn
a50cc1ff7f Merge pull request 'Update dependency @sveltejs/kit to v2.20.4' (#41) from renovate/sveltejs-kit-2.x-lockfile into main
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 40s
Reviewed-on: #41
2025-04-05 23:50:09 +03:00
ngn
f2ec9479b1 Merge pull request 'Update module github.com/mattn/go-sqlite3 to v1.14.27' (#40) from renovate/github.com-mattn-go-sqlite3-1.x into main
All checks were successful
Build the docker image for the API / build (push) Successful in 2m18s
Reviewed-on: #40
2025-04-05 23:43:34 +03:00
ngn
e1eae3c05b Merge pull request 'Update dependency vite to v5.4.17' (#39) from renovate/vite-5.x-lockfile into main
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 38s
Reviewed-on: #39
2025-04-05 23:38:39 +03:00
ngn
53ab201ab3 Merge pull request 'Update golang Docker tag to v1.24.2' (#36) from renovate/golang-1.x into main
All checks were successful
Build the docker image for the API / build (push) Successful in 3m4s
Reviewed-on: #36
2025-04-05 23:38:18 +03:00
ngn
c9792fb6be Merge pull request 'Update Node.js to v23.11.0' (#35) from renovate/node-23.x into main
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 40s
Reviewed-on: #35
2025-04-05 23:24:26 +03:00
ngn
68808a14f9 Merge pull request 'Update dependency prettier to v3.5.3' (#34) from renovate/prettier-3.x-lockfile into main
Some checks failed
Build the docker image for the frontend application / build (push) Has been cancelled
Reviewed-on: #34
2025-04-05 23:24:16 +03:00
ngn
4343192a2c Merge pull request 'Update dependency svelte to v5.25.7' (#28) from renovate/svelte-5.x-lockfile into main
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 36s
Reviewed-on: #28
2025-04-05 23:22:31 +03:00
20fb3cd685 Update dependency svelte to v5.25.7 2025-04-05 17:03:22 +00:00
906ace188b Update dependency vite to v5.4.17 2025-04-05 17:03:16 +00:00
f2a1a21a8c Update dependency prettier to v3.5.3 2025-04-05 17:03:12 +00:00
9353631931 Update dependency @sveltejs/kit to v2.20.4 2025-04-05 17:03:08 +00:00
ngn
4eb5ad6ef3 add _version to easily access app/api version
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 57s
Build the docker image for the doc server / build (push) Successful in 10s
Signed-off-by: ngn <ngn@ngn.tf>
2025-04-05 19:52:51 +03:00
ngn
bac570615e bump frontend version
Signed-off-by: ngn <ngn@ngn.tf>
2025-04-05 19:40:29 +03:00
ngn
037a4405b9 fix service info, update images, add meta tags
Signed-off-by: ngn <ngn@ngn.tf>
2025-04-05 19:39:10 +03:00
389a9d3df4 Update module github.com/mattn/go-sqlite3 to v1.14.27 2025-04-02 17:04:40 +00:00
f7e4442de5 Update Node.js to v23.11.0 2025-04-01 21:03:03 +00:00
e4d1fc21fb Update golang Docker tag to v1.24.2 2025-04-01 21:03:00 +00:00
ngn
fe6b3512fd Merge pull request 'Update dependency @sveltejs/kit to v2.20.2' (#32) from renovate/sveltejs-kit-2.x-lockfile into main
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 26s
Reviewed-on: #32
2025-03-25 00:11:28 +03:00
ngn
3dbc2e0510 Merge branch 'main' of https://git.ngn.tf/ngn/website 2025-03-25 00:09:30 +03:00
ngn
26362cf89d [skip ci] add path filters to workflows
Signed-off-by: ngn <ngn@ngn.tf>
2025-03-25 00:08:09 +03:00
ngn
16288c2bcb Merge pull request 'Update dependency vite to v5.4.15' (#38) from renovate/vite-5.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 2m26s
Build the docker image for the frontend application / build (push) Successful in 51s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #38
2025-03-25 00:06:41 +03:00
177b546fb9 Update dependency vite to v5.4.15 2025-03-24 12:03:27 +00:00
311a37ae5c Update dependency @sveltejs/kit to v2.20.2 2025-03-21 12:02:44 +00:00
ngn
4380638982 Merge pull request 'Update golang Docker tag to v1.24.0' (#29) from renovate/golang-1.x into main
All checks were successful
Build the docker image for the API / build (push) Successful in 3m6s
Build the docker image for the frontend application / build (push) Successful in 1m12s
Build the docker image for the doc server / build (push) Successful in 11s
Reviewed-on: #29
2025-02-15 01:22:48 +03:00
ngn
32e0ddaa36 Merge branch 'main' into renovate/golang-1.x 2025-02-15 01:22:38 +03:00
ngn
27c58b1174 Merge pull request 'Update dependency prettier to v3.5.1' (#30) from renovate/prettier-3.x-lockfile into main
Some checks failed
Build the docker image for the doc server / build (push) Waiting to run
Build the docker image for the API / build (push) Successful in 14s
Build the docker image for the frontend application / build (push) Has been cancelled
Reviewed-on: #30
2025-02-15 01:22:28 +03:00
d5f1325b79 Update dependency prettier to v3.5.1 2025-02-13 17:03:53 +00:00
9e27aabdb9 Update golang Docker tag to v1.24.0 2025-02-12 21:03:55 +00:00
ngn
a1967141ae Merge pull request 'Update dependency marked to v15.0.7' (#26) from renovate/marked-15.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 8s
Build the docker image for the frontend application / build (push) Successful in 56s
Build the docker image for the doc server / build (push) Successful in 9s
Reviewed-on: #26
2025-02-12 19:49:05 +03:00
ngn
a172262dbd Merge branch 'main' into renovate/marked-15.x-lockfile 2025-02-12 19:48:58 +03:00
ngn
caee8c2a90 Merge pull request 'Update dependency svelte to v5.19.10' (#27) from renovate/svelte-5.x-lockfile into main
Some checks failed
Build the docker image for the frontend application / build (push) Waiting to run
Build the docker image for the doc server / build (push) Waiting to run
Build the docker image for the API / build (push) Has been cancelled
Reviewed-on: #27
2025-02-12 19:48:53 +03:00
060c5f0c73 Update dependency svelte to v5.19.10 2025-02-11 17:04:42 +00:00
e2796b39b8 Update dependency marked to v15.0.7 2025-02-10 02:03:06 +00:00
ngn
191c54cc9a Merge pull request 'Update dependency svelte to v5.19.9' (#24) from renovate/svelte-5.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 8s
Build the docker image for the frontend application / build (push) Successful in 47s
Build the docker image for the doc server / build (push) Successful in 7s
Reviewed-on: #24
2025-02-09 19:14:43 +03:00
ngn
87095a8c35 Merge branch 'main' into renovate/svelte-5.x-lockfile 2025-02-09 19:14:35 +03:00
ngn
a28a678693 Merge pull request 'Update dependency prettier to v3.5.0' (#25) from renovate/prettier-3.x-lockfile into main
Some checks failed
Build the docker image for the doc server / build (push) Waiting to run
Build the docker image for the API / build (push) Successful in 10s
Build the docker image for the frontend application / build (push) Has been cancelled
Reviewed-on: #25
2025-02-09 19:14:27 +03:00
d3fd1e479c Update dependency prettier to v3.5.0 2025-02-09 12:03:11 +00:00
7f97f5330e Update dependency svelte to v5.19.9 2025-02-07 02:03:20 +00:00
ngn
30286710d1 Merge pull request 'Update dependency @sveltejs/kit to v2.17.1' (#22) from renovate/sveltejs-kit-2.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 2m43s
Build the docker image for the frontend application / build (push) Successful in 55s
Build the docker image for the doc server / build (push) Successful in 9s
Reviewed-on: #22
2025-02-05 19:09:56 +03:00
ngn
8de018bf5c Merge branch 'main' into renovate/sveltejs-kit-2.x-lockfile 2025-02-05 19:09:47 +03:00
ngn
5a73910331 Merge pull request 'Update golang Docker tag to v1.23.6' (#23) from renovate/golang-1.x into main
Some checks are pending
Build the docker image for the API / build (push) Waiting to run
Build the docker image for the frontend application / build (push) Waiting to run
Build the docker image for the doc server / build (push) Waiting to run
Reviewed-on: #23
2025-02-05 19:09:37 +03:00
53236fab61 Update golang Docker tag to v1.23.6 2025-02-04 22:03:52 +00:00
d5dfaaad96 Update dependency @sveltejs/kit to v2.17.1 2025-02-04 21:06:20 +00:00
ngn
c1e2974f1b Merge pull request 'Update dependency svelte to v5.19.7' (#20) from renovate/svelte-5.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 3m40s
Build the docker image for the frontend application / build (push) Successful in 59s
Build the docker image for the doc server / build (push) Successful in 12s
Reviewed-on: #20
2025-02-04 23:24:47 +03:00
ngn
40cdbfba36 Merge branch 'main' into renovate/svelte-5.x-lockfile 2025-02-04 23:24:39 +03:00
ngn
be8777eb67 Merge pull request 'Update dependency dompurify to v3.2.4' (#21) from renovate/dompurify-3.x-lockfile into main
Some checks failed
Build the docker image for the frontend application / build (push) Waiting to run
Build the docker image for the doc server / build (push) Waiting to run
Build the docker image for the API / build (push) Has been cancelled
Reviewed-on: #21
2025-02-04 23:24:27 +03:00
ngn
b75bd4f3b2 Merge branch 'main' into renovate/dompurify-3.x-lockfile 2025-02-04 23:24:10 +03:00
ngn
c127c62492 Merge pull request 'Update Node.js to v23.7.0' (#18) from renovate/node-23.x into main
Some checks failed
Build the docker image for the frontend application / build (push) Waiting to run
Build the docker image for the doc server / build (push) Waiting to run
Build the docker image for the API / build (push) Has been cancelled
Reviewed-on: #18
2025-02-04 23:24:01 +03:00
6a01631d22 Update dependency svelte to v5.19.7 2025-02-03 18:03:46 +00:00
1389233108 Update Node.js to v23.7.0 2025-01-31 20:04:10 +00:00
e2a4df8602 Update dependency dompurify to v3.2.4 2025-01-30 10:04:17 +00:00
ngn
b4d8ab7606 Merge pull request 'Update dependency svelte to v5.19.3' (#19) from renovate/svelte-5.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 10s
Build the docker image for the frontend application / build (push) Successful in 36s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #19
2025-01-28 07:32:31 +03:00
478834fe2f Update dependency svelte to v5.19.3 2025-01-27 11:06:42 +00:00
ngn
ba441d5192 Merge branch 'main' of https://git.ngn.tf/ngn/website
All checks were successful
Build the docker image for the API / build (push) Successful in 10s
Build the docker image for the frontend application / build (push) Successful in 9s
Build the docker image for the doc server / build (push) Successful in 8s
2025-01-22 11:22:47 +03:00
ngn
4556452f69 Merge pull request 'Update dependency @sveltejs/kit to v2.16.1' (#15) from renovate/sveltejs-kit-2.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 9s
Build the docker image for the frontend application / build (push) Successful in 29s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #15
2025-01-22 11:18:26 +03:00
ngn
6217103c5a Merge branch 'main' into renovate/sveltejs-kit-2.x-lockfile 2025-01-22 11:18:17 +03:00
ngn
eee6c2c2d2 Merge pull request 'Update dependency vite to v5.4.14' (#16) from renovate/vite-5.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 9s
Build the docker image for the frontend application / build (push) Successful in 29s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #16
2025-01-22 11:17:19 +03:00
ngn
db7d062662 Merge branch 'main' into renovate/vite-5.x-lockfile 2025-01-22 11:17:13 +03:00
ngn
c8a4067596 fix the admin script return value
Signed-off-by: ngn <ngn@ngn.tf>
2025-01-22 11:12:37 +03:00
ngn
437404dfca Merge pull request 'Update dependency svelte to v5.19.1' (#17) from renovate/svelte-5.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 1m51s
Build the docker image for the frontend application / build (push) Successful in 27s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #17
2025-01-22 07:21:46 +03:00
1b24596abf Update dependency svelte to v5.19.1 2025-01-21 12:03:26 +00:00
1759261332 Update dependency vite to v5.4.14 2025-01-21 11:04:04 +00:00
3a9685511b Update dependency @sveltejs/kit to v2.16.1 2025-01-21 10:03:36 +00:00
ngn
7eac5d8bb3 Merge pull request 'Update dependency vite to v5.4.13' (#14) from renovate/vite-5.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 10s
Build the docker image for the frontend application / build (push) Successful in 29s
Build the docker image for the doc server / build (push) Successful in 9s
Reviewed-on: #14
2025-01-21 09:10:00 +03:00
68bc30d98b Update dependency vite to v5.4.13 2025-01-20 20:02:12 +00:00
ngn
bc9b92cdd2 Merge pull request 'Update dependency vite to v5.4.12' (#12) from renovate/vite-5.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 8s
Build the docker image for the frontend application / build (push) Successful in 27s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #12
2025-01-20 20:29:09 +03:00
ngn
e49b30b2fb Merge branch 'main' into renovate/vite-5.x-lockfile 2025-01-20 20:28:59 +03:00
ngn
01a6cf34bc Merge pull request 'Update dependency @sveltejs/adapter-auto to v4' (#9) from renovate/sveltejs-adapter-auto-4.x into main
All checks were successful
Build the docker image for the API / build (push) Successful in 9s
Build the docker image for the frontend application / build (push) Successful in 30s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #9
2025-01-20 20:27:31 +03:00
ngn
3ab85605c6 Merge branch 'main' into renovate/sveltejs-adapter-auto-4.x 2025-01-20 20:27:23 +03:00
ngn
2bfc4886c8 Merge pull request 'Update dependency svelte to v5.19.0' (#8) from renovate/svelte-5.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 9s
Build the docker image for the frontend application / build (push) Successful in 29s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #8
2025-01-20 20:07:37 +03:00
ngn
e861bb4030 Merge branch 'main' into renovate/svelte-5.x-lockfile 2025-01-20 20:07:28 +03:00
ngn
002044232f Merge pull request 'Update dependency @sveltejs/kit to v2.16.0' (#7) from renovate/sveltejs-kit-2.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 9s
Build the docker image for the frontend application / build (push) Successful in 31s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #7
2025-01-20 20:06:26 +03:00
7facbbdeb2 Update dependency svelte to v5.19.0 2025-01-20 17:02:04 +00:00
55038a9745 Update dependency @sveltejs/kit to v2.16.0 2025-01-20 17:02:00 +00:00
665fb2e34c Update dependency vite to v5.4.12 2025-01-20 17:01:55 +00:00
ngn
f0e168c684 Merge pull request 'Update golang Docker tag to v1.23.5' (#4) from renovate/golang-1.x into main
All checks were successful
Build the docker image for the API / build (push) Successful in 2m5s
Build the docker image for the frontend application / build (push) Successful in 8s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #4
2025-01-20 19:45:41 +03:00
ngn
e13ccd2e3e Merge branch 'main' into renovate/golang-1.x 2025-01-20 19:45:32 +03:00
ngn
6e07adb59d Merge pull request 'Update module github.com/gofiber/fiber/v2 to v2.52.6' (#5) from renovate/github.com-gofiber-fiber-v2-2.x into main
All checks were successful
Build the docker image for the API / build (push) Successful in 1m55s
Build the docker image for the frontend application / build (push) Successful in 10s
Build the docker image for the doc server / build (push) Successful in 7s
Reviewed-on: #5
2025-01-20 19:41:56 +03:00
ngn
7239df94dd Merge branch 'main' into renovate/github.com-gofiber-fiber-v2-2.x 2025-01-20 19:41:47 +03:00
ngn
ec7afca33d Merge branch 'main' into renovate/golang-1.x 2025-01-20 19:40:46 +03:00
ngn
565ed66f70 Merge pull request 'Update Node.js to v23.6.0' (#6) from renovate/node-23.x into main
All checks were successful
Build the docker image for the API / build (push) Successful in 8s
Build the docker image for the frontend application / build (push) Successful in 50s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #6
2025-01-20 19:40:28 +03:00
ngn
12da87479c Merge branch 'main' into renovate/node-23.x 2025-01-20 19:40:15 +03:00
ngn
db3f0ed29a Merge pull request 'Update dependency prettier-plugin-svelte to v3.3.3' (#3) from renovate/prettier-plugin-svelte-3.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 9s
Build the docker image for the frontend application / build (push) Successful in 30s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #3
2025-01-20 19:37:24 +03:00
ngn
2b13b2e1ca Merge branch 'main' into renovate/prettier-plugin-svelte-3.x-lockfile 2025-01-20 19:37:17 +03:00
ngn
914d1abf64 Merge pull request 'Update dependency @sveltejs/vite-plugin-svelte to v4.0.4' (#2) from renovate/sveltejs-vite-plugin-svelte-4.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 9s
Build the docker image for the frontend application / build (push) Successful in 29s
Build the docker image for the doc server / build (push) Successful in 8s
Reviewed-on: #2
2025-01-20 19:31:26 +03:00
ngn
03564197a2 Merge branch 'main' into renovate/sveltejs-vite-plugin-svelte-4.x-lockfile 2025-01-20 19:31:13 +03:00
ngn
8e49322395 update repo name in the badge urls
All checks were successful
Build the docker image for the API / build (push) Successful in 9s
Build the docker image for the frontend application / build (push) Successful in 8s
Build the docker image for the doc server / build (push) Successful in 9s
Signed-off-by: ngn <ngn@ngn.tf>
2025-01-20 19:25:56 +03:00
ngn
af8c26511a add gitea workflow badges
All checks were successful
Build the docker image for the API / build (push) Successful in 8s
Build the docker image for the frontend application / build (push) Successful in 8s
Build the docker image for the doc server / build (push) Successful in 9s
Signed-off-by: ngn <ngn@ngn.tf>
2025-01-20 19:24:47 +03:00
ngn
5813338232 get rid of the readme badges
Signed-off-by: ngn <ngn@ngn.tf>
2025-01-20 19:23:01 +03:00
ngn
29b8caab34 get rid of dependabot
All checks were successful
Build the docker image for the API / build (push) Successful in 8s
Build the docker image for the frontend application / build (push) Successful in 9s
Build the docker image for the doc server / build (push) Successful in 8s
Signed-off-by: ngn <ngn@ngn.tf>
2025-01-20 19:20:31 +03:00
ngn
3a78818e8d Merge pull request 'Update dependency @sveltejs/adapter-node to v5.2.12' (#1) from renovate/sveltejs-adapter-node-5.x-lockfile into main
All checks were successful
Build the docker image for the API / build (push) Successful in 10s
Build the docker image for the frontend application / build (push) Successful in 29s
Build the docker image for the doc server / build (push) Successful in 7s
Reviewed-on: #1
2025-01-20 19:15:01 +03:00
c53103352e Update dependency prettier-plugin-svelte to v3.3.3 2025-01-20 08:02:26 +00:00
442c1d2ca7 Update dependency @sveltejs/vite-plugin-svelte to v4.0.4 2025-01-20 08:02:22 +00:00
803506153f Update dependency @sveltejs/adapter-node to v5.2.12 2025-01-20 08:02:16 +00:00
ngn
01205d6a1f add API_PASSWORD env and update screenshots
All checks were successful
Build the docker image for the API / build (push) Successful in 9s
Build the docker image for the frontend application / build (push) Successful in 9s
Build the docker image for the doc server / build (push) Successful in 8s
Signed-off-by: ngn <ngn@ngn.tf>
2025-01-20 10:14:57 +03:00
ce40a002b7 Update dependency @sveltejs/adapter-auto to v4 2025-01-20 07:02:26 +00:00
7d5b649bd7 Update Node.js to v23.6.0 2025-01-20 07:02:13 +00:00
29937d3af2 Update module github.com/gofiber/fiber/v2 to v2.52.6 2025-01-20 07:02:11 +00:00
b2cdd937b6 Update golang Docker tag to v1.23.5 2025-01-20 07:02:04 +00:00
55 changed files with 371 additions and 353 deletions

View File

@ -3,6 +3,7 @@ name: Build the docker image for the API
on:
push:
branches: ["main"]
paths: ["api/**"]
env:
REGISTRY: git.ngn.tf

View File

@ -3,6 +3,7 @@ name: Build the docker image for the frontend application
on:
push:
branches: ["main"]
paths: ["app/**"]
env:
REGISTRY: git.ngn.tf
@ -25,10 +26,14 @@ jobs:
- name: Build image
run: |
cd app
docker build --build-arg WEBSITE_REPORT_URL=https://git.ngn.tf/ngn/website/issues/new \
--build-arg WEBSITE_SOURCE_URL=https://git.ngn.tf/ngn/website \
--build-arg WEBSITE_APP_URL=https://ngn.tf \
--build-arg WEBSITE_API_URL=https://api.ngn.tf \
--build-arg WEBSITE_DOC_URL=http://doc:7003 \
docker build --build-arg WEBSITE_REPORT_URL=https://git.ngn.tf/ngn/website/issues/new \
--build-arg WEBSITE_SOURCE_URL=https://git.ngn.tf/ngn/website \
--build-arg WEBSITE_APP_URL_CLEAR=https://ngn.tf \
--build-arg WEBSITE_APP_URL_ONION=http://ngntfwmwovvku6eqi7dzzgzv2wzlvq2cqtqha7ccgzub2xnivsuxnuyd.onion \
--build-arg WEBSITE_APP_URL_I2P=http://ngn.i2p \
--build-arg WEBSITE_API_URL_CLEAR=https://api.ngn.tf \
--build-arg WEBSITE_API_URL_ONION=http://api.ngntfwmwovvku6eqi7dzzgzv2wzlvq2cqtqha7ccgzub2xnivsuxnuyd.onion \
--build-arg WEBSITE_API_URL_I2P=https://api.ngn.i2p \
--build-arg WEBSITE_DOC_URL=http://doc:7003 \
--tag ${{env.REGISTRY}}/${{env.IMAGE}}:latest .
docker push ${{env.REGISTRY}}/${{env.IMAGE}}:latest

View File

@ -3,6 +3,7 @@ name: Build the docker image for the doc server
on:
push:
branches: ["main"]
paths: ["doc/**"]
env:
REGISTRY: git.ngn.tf

View File

@ -1,21 +0,0 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/app"
schedule:
interval: "daily"
- package-ecosystem: "gomod"
directory: "/api"
schedule:
interval: "daily"
- package-ecosystem: "docker"
directory: "/app"
schedule:
interval: "weekly"
- package-ecosystem: "docker"
directory: "/api"
schedule:
interval: "weekly"

View File

@ -1,7 +1,8 @@
# website | my personal website
![Version](https://img.shields.io/github/package-json/v/ngn13/ngn13.fun?filename=app%2Fpackage.json&color=blue)
![Website Status](https://img.shields.io/website?up_color=green&down_color=red&url=https%3A%2F%2Fngn.tf&label=Website%20Status)
![API Status](https://img.shields.io/website?up_color=green&down_color=red&url=https%3A%2F%2Fapi.ngn.tf&label=API%20Status)
![](https://git.ngn.tf/ngn/website/actions/workflows/build-app.yml/badge.svg)
![](https://git.ngn.tf/ngn/website/actions/workflows/build-api.yml/badge.svg)
![](https://git.ngn.tf/ngn/website/actions/workflows/build-doc.yml/badge.svg)
This repo contains all the source code for my personal website, [ngn.tf](https://ngn.tf)
All code is licensed under AGPL version 3 (see [LICENSE.txt](LICENSE.txt))
@ -68,6 +69,7 @@ on my local git server until I deleted it when I was done with 6.0. This website
- **v4.0 (2023 november - 2024 october)**: In this version the frontend was still similar to 3.0, the big changes are in
the API. I rewrote the API with Fiber. This version was the first version hosted on `ngn.tf` which is my new domain name.
Here is a [picture of the index](assets/4.0_index.png) and the [blog page](assets/4.0_blog.png).
- **v5.0 (2024 october - 2025 january)**: This version just had simple frontend UI changes compared to 4.0, at this
point I was thinking about doing a massive rework (which I did with 6.0), however I was working on some other shit at
@ -81,6 +83,6 @@ and Turkish, which was something I wanted to do for the longest time ever.
Damn it has been 4 years since I wrote that shit HTML page huh? Time flies...
## Screenshots (from v4.0)
![](assets/4.0_index.png)
![](assets/4.0_blog.png)
## Screenshots (from v6.0)
![](assets/6.0_index.png)
![](assets/6.0_services.png)

View File

@ -218,6 +218,7 @@ class AdminScript:
"logs": self.get_logs,
}
self.api_url_env = "API_URL"
self.password_env = "API_PASSWORD"
def __format_time(self, ts: int) -> str:
return datetime.fromtimestamp(ts, UTC).strftime("%H:%M:%S %d/%m/%Y")
@ -264,7 +265,10 @@ class AdminScript:
return False
try:
password = self.log.password("Please enter the admin password")
password = getenv(self.password_env)
if password is None:
password = self.log.password("Please enter the admin password")
self.api = AdminAPI(url, password)
if len(argv) == 2:
@ -401,4 +405,4 @@ class AdminScript:
if __name__ == "__main__":
script = AdminScript()
exit(script.run() if 1 else 0)
exit(0 if script.run() else 1)

View File

@ -1,4 +1,4 @@
FROM golang:1.23.4
FROM golang:1.24.2
WORKDIR /api

View File

@ -37,14 +37,14 @@ func (c *Type) Load() (err error) {
// default options
c.Options = []Option{
{Name: "debug", Value: "false", Type: OPTION_TYPE_BOOL, Required: true}, // should display debug messgaes?
{Name: "app_url", Value: "http://localhost:7001/", Type: OPTION_TYPE_URL, Required: true}, // frontend application URL for the website
{Name: "password", Value: "", Type: OPTION_TYPE_STR, Required: true}, // admin password
{Name: "host", Value: "0.0.0.0:7002", Type: OPTION_TYPE_STR, Required: true}, // host the server should listen on
{Name: "ip_header", Value: "X-Real-IP", Type: OPTION_TYPE_STR, Required: false}, // header that should be checked for obtaining the client IP
{Name: "interval", Value: "1h", Type: OPTION_TYPE_STR, Required: false}, // service status check interval
{Name: "timeout", Value: "15s", Type: OPTION_TYPE_STR, Required: false}, // timeout for the service status check
{Name: "limit", Value: "5s", Type: OPTION_TYPE_STR, Required: false}, // if the service responds slower than this limit, it will be marked as "slow"
{Name: "debug", Value: "false", Type: OPTION_TYPE_BOOL, Required: true}, // should display debug messgaes?
{Name: "app_url_clear", Value: "http://localhost:7001/", Type: OPTION_TYPE_URL, Required: true}, // frontend application URL for the website
{Name: "password", Value: "", Type: OPTION_TYPE_STR, Required: true}, // admin password
{Name: "host", Value: "0.0.0.0:7002", Type: OPTION_TYPE_STR, Required: true}, // host the server should listen on
{Name: "ip_header", Value: "X-Real-IP", Type: OPTION_TYPE_STR, Required: false}, // header that should be checked for obtaining the client IP
{Name: "interval", Value: "1h", Type: OPTION_TYPE_STR, Required: false}, // service status check interval
{Name: "timeout", Value: "15s", Type: OPTION_TYPE_STR, Required: false}, // timeout for the service status check
{Name: "limit", Value: "5s", Type: OPTION_TYPE_STR, Required: false}, // if the service responds slower than this limit, it will be marked as "slow"
}
c.Count = len(c.Options)

View File

@ -3,20 +3,20 @@ module github.com/ngn13/website/api
go 1.21.3
require (
github.com/gofiber/fiber/v2 v2.52.5
github.com/mattn/go-sqlite3 v1.14.24
github.com/gofiber/fiber/v2 v2.52.6
github.com/mattn/go-sqlite3 v1.14.27
)
require (
github.com/andybalholm/brotli v1.0.5 // indirect
github.com/google/uuid v1.5.0 // indirect
github.com/klauspost/compress v1.17.0 // indirect
github.com/andybalholm/brotli v1.1.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/klauspost/compress v1.17.9 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.51.0 // indirect
github.com/valyala/tcplisten v1.0.0 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/sys v0.28.0 // indirect
)

View File

@ -1,11 +1,19 @@
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
github.com/gofiber/fiber/v2 v2.52.5 h1:tWoP1MJQjGEe4GB5TUGOi7P2E0ZMMRx5ZTG4rT+yGMo=
github.com/gofiber/fiber/v2 v2.52.5/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
github.com/gofiber/fiber/v2 v2.52.6 h1:Rfp+ILPiYSvvVuIPvxrBns+HJp8qGLDnLJawAu27XVI=
github.com/gofiber/fiber/v2 v2.52.6/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw=
github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM=
github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
@ -13,8 +21,12 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM=
github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/mattn/go-sqlite3 v1.14.27 h1:drZCnuvf37yPfs95E5jd9s3XhdVWLal+6BOK6qrv6IU=
github.com/mattn/go-sqlite3 v1.14.27/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
@ -27,3 +39,5 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=

View File

@ -7,7 +7,7 @@ import (
func GET_Index(c *fiber.Ctx) error {
conf := c.Locals("config").(*config.Type)
app := conf.GetURL("app_url")
app := conf.GetURL("app_url_clear")
// redirect to the API documentation
return c.Redirect(app.JoinPath("/doc/api").String())

View File

@ -40,7 +40,7 @@ func GET_News(c *fiber.Ctx) error {
db := c.Locals("database").(*database.Type)
conf := c.Locals("config").(*config.Type)
app := conf.GetURL("app_url")
app := conf.GetURL("app_url_clear")
lang := c.Params("lang")
if lang == "" || len(lang) != 2 {

1
app/.gitignore vendored
View File

@ -8,3 +8,4 @@ node_modules
!.env.example
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
nerdfonts.*

View File

@ -1,22 +1,39 @@
# build the application with node
FROM node:23.5.0 AS build
FROM node:23.11.0 AS build
# app URLs
ARG WEBSITE_APP_URL_CLEAR
ARG WEBSITE_APP_URL_ONION
ARG WEBSITE_APP_URL_I2P
ENV WEBSITE_APP_URL_CLEAR=$WEBSITE_APP_URL_CLEAR
ENV WEBSITE_APP_URL_ONION=$WEBSITE_APP_URL_ONION
ENV WEBSITE_APP_URL_I2P=$WEBSITE_APP_URL_I2P
# API URLs
ARG WEBSITE_API_URL_CLEAR
ARG WEBSITE_API_URL_ONION
ARG WEBSITE_API_URL_I2P
ENV WEBSITE_API_URL_CLEAR=$WEBSITE_API_URL_CLEAR
ENV WEBSITE_API_URL_ONION=$WEBSITE_API_URL_ONION
ENV WEBSITE_API_URL_I2P=$WEBSITE_API_URL_I2P
# other config
ARG WEBSITE_REPORT_URL
ARG WEBSITE_SOURCE_URL
ARG WEBSITE_APP_URL
ARG WEBSITE_API_URL
ARG WEBSITE_DOC_URL
ENV WEBSITE_REPORT_URL=$WEBSITE_REPORT_URL
ENV WEBSITE_SOURCE_URL=$WEBSITE_SOURCE_URL
ENV WEBSITE_APP_URL=$WEBSITE_APP_URL
ENV WEBSITE_API_URL=$WEBSITE_API_URL
ENV WEBSITE_DOC_URL=$WEBSITE_DOC_URL
WORKDIR /app
COPY . /app
RUN npm install && npm run build
RUN apt install -y make sed wget
RUN npm install
RUN make
# run it with bun (a lot faster)
FROM oven/bun:latest AS main

View File

@ -1,10 +1,25 @@
all:
NF_CSS = static/css/nerdfonts.css
NF_WOFF = static/assets/nerdfonts.woff2
all: $(NF_CSS)
npm run build
$(NF_CSS): $(NF_WOFF)
wget "https://www.nerdfonts.com/assets/css/webfont.css" -O $@
sed 's/\.\.\/fonts\/Symbols-2048-em Nerd Font Complete\.woff2/\/assets\/nerdfonts\.woff2/g' -i $@
$(NF_WOFF):
wget "https://www.nerdfonts.com/assets/fonts/Symbols-2048-em%20Nerd%20Font%20Complete.woff2" -O $@
run: $(NF_CSS)
npm run dev
format:
npm run format
run:
npm run dev
clean:
rm -rf build
rm $(NF_CSS)
rm $(NF_WOFF)
.PHONY: format
.PHONY: format run clean

132
app/package-lock.json generated
View File

@ -1,20 +1,19 @@
{
"name": "website",
"version": "6.0",
"version": "6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "website",
"version": "6.0",
"version": "6.2",
"dependencies": {
"@types/dompurify": "^3.2.0",
"dompurify": "^3.2.3",
"marked": "^15.0.6",
"svelte-i18n": "^4.0.1"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.3.1",
"@sveltejs/adapter-auto": "^4.0.0",
"@sveltejs/adapter-node": "^5.2.11",
"@sveltejs/kit": "^2.15.1",
"@sveltejs/vite-plugin-svelte": "^4.0.3",
@ -832,11 +831,21 @@
"win32"
]
},
"node_modules/@sveltejs/acorn-typescript": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz",
"integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==",
"license": "MIT",
"peerDependencies": {
"acorn": "^8.9.0"
}
},
"node_modules/@sveltejs/adapter-auto": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-3.3.1.tgz",
"integrity": "sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-4.0.0.tgz",
"integrity": "sha512-kmuYSQdD2AwThymQF0haQhM8rE5rhutQXG4LNbnbShwhMO4qQGnKaaTy+88DuNSuoQDi58+thpq8XpHc1+oEKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"import-meta-resolve": "^4.1.0"
},
@ -845,10 +854,11 @@
}
},
"node_modules/@sveltejs/adapter-node": {
"version": "5.2.11",
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.2.11.tgz",
"integrity": "sha512-lR7/dfUaKFf3aI408KRDy/BVDYoqUws7zNOJz2Hl4JoshlTnMgdha3brXBRFXB+cWtYvJjjPhvmq3xqpbioi4w==",
"version": "5.2.12",
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.2.12.tgz",
"integrity": "sha512-0bp4Yb3jKIEcZWVcJC/L1xXp9zzJS4hDwfb4VITAkfT4OVdkspSHsx7YhqJDbb2hgLl6R9Vs7VQR+fqIVOxPUQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@rollup/plugin-commonjs": "^28.0.1",
"@rollup/plugin-json": "^6.1.0",
@ -860,24 +870,23 @@
}
},
"node_modules/@sveltejs/kit": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.15.1.tgz",
"integrity": "sha512-8t7D3hQHbUDMiaQ2RVnjJJ/+Ur4Fn/tkeySJCsHtX346Q9cp3LAnav8xXdfuqYNJwpUGX0x3BqF1uvbmXQw93A==",
"version": "2.20.4",
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.20.4.tgz",
"integrity": "sha512-B3Y1mb1Qjt57zXLVch5tfqsK/ebHe6uYTcFSnGFNwRpId3+fplLgQK6Z2zhDVBezSsPuhDq6Pry+9PA88ocN6Q==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"@types/cookie": "^0.6.0",
"cookie": "^0.6.0",
"devalue": "^5.1.0",
"esm-env": "^1.2.1",
"esm-env": "^1.2.2",
"import-meta-resolve": "^4.1.0",
"kleur": "^4.1.5",
"magic-string": "^0.30.5",
"mrmime": "^2.0.0",
"sade": "^1.8.1",
"set-cookie-parser": "^2.6.0",
"sirv": "^3.0.0",
"tiny-glob": "^0.2.9"
"sirv": "^3.0.0"
},
"bin": {
"svelte-kit": "svelte-kit.js"
@ -892,10 +901,11 @@
}
},
"node_modules/@sveltejs/vite-plugin-svelte": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-4.0.3.tgz",
"integrity": "sha512-J7nC5gT5qpmvyD2pmzPUntLUgoinyEaNy9sTpGGE6N7pblggO0A1NyneJJvR2ELlzK6ti28aF2SLXG1yJdnJeA==",
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-4.0.4.tgz",
"integrity": "sha512-0ba1RQ/PHen5FGpdSrW7Y3fAMQjrXantECALeOiOdBdzR5+5vPP6HVZRLmZaQL+W8m++o+haIAKq5qT+MiZ7VA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@sveltejs/vite-plugin-svelte-inspector": "^3.0.0-next.0||^3.0.0",
"debug": "^4.3.7",
@ -912,11 +922,12 @@
"vite": "^5.0.0"
}
},
"node_modules/@sveltejs/vite-plugin-svelte/node_modules/@sveltejs/vite-plugin-svelte-inspector": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-3.0.0.tgz",
"integrity": "sha512-hBxSYW/66989cq9dN248omD/ziskSdIV1NqfuueuAI1z6jGcg14k9Zd98pDIEnoA6wC9kWUGuQ6adzBbWwQyRg==",
"node_modules/@sveltejs/vite-plugin-svelte-inspector": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-3.0.1.tgz",
"integrity": "sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.3.7"
},
@ -936,15 +947,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/@types/dompurify": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.2.0.tgz",
"integrity": "sha512-Fgg31wv9QbLDA0SpTOXO3MaxySc4DKGLi8sna4/Utjo4r3ZRPdCt4UQee8BWr+Q5z21yifghREPJGYaEOEIACg==",
"deprecated": "This is a stub types definition. dompurify provides its own type definitions, so you do not need this installed.",
"dependencies": {
"dompurify": "*"
}
},
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@ -974,14 +976,6 @@
"node": ">=0.4.0"
}
},
"node_modules/acorn-typescript": {
"version": "1.4.13",
"resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz",
"integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==",
"peerDependencies": {
"acorn": ">=8.9.0"
}
},
"node_modules/aria-query": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
@ -1090,9 +1084,9 @@
"dev": true
},
"node_modules/dompurify": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.3.tgz",
"integrity": "sha512-U1U5Hzc2MO0oW3DF+G9qYN0aT7atAou4AgI0XjWz061nyBPbdxkfdhfy5uMgGn6+oLFCfn44ZGbdDqCzVmlOWA==",
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.5.tgz",
"integrity": "sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ==",
"license": "(MPL-2.0 OR Apache-2.0)",
"optionalDependencies": {
"@types/trusted-types": "^2.0.7"
@ -1189,9 +1183,10 @@
}
},
"node_modules/esm-env": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.1.tgz",
"integrity": "sha512-U9JedYYjCnadUlXk7e1Kr+aENQhtUaoaV9+gZm1T8LC/YBAPJx3NSPIAurFOC0U5vrdSevnUJS2/wUVxGwPhng=="
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
"integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==",
"license": "MIT"
},
"node_modules/esniff": {
"version": "2.0.1",
@ -1209,9 +1204,10 @@
}
},
"node_modules/esrap": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/esrap/-/esrap-1.3.2.tgz",
"integrity": "sha512-C4PXusxYhFT98GjLSmb20k9PREuUdporer50dhzGuJu9IJXktbMddVCMLAERl5dAHyAi73GWWCE4FVHGP1794g==",
"version": "1.4.6",
"resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.6.tgz",
"integrity": "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==",
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
}
@ -1400,9 +1396,9 @@
}
},
"node_modules/marked": {
"version": "15.0.6",
"resolved": "https://registry.npmjs.org/marked/-/marked-15.0.6.tgz",
"integrity": "sha512-Y07CUOE+HQXbVDCGl3LXggqJDbXDP2pArc2C1N1RRMN0ONiShoSsIInMd5Gsxupe7fKLpgimTV+HOJ9r7bA+pg==",
"version": "15.0.7",
"resolved": "https://registry.npmjs.org/marked/-/marked-15.0.7.tgz",
"integrity": "sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==",
"license": "MIT",
"bin": {
"marked": "bin/marked.js"
@ -1531,9 +1527,9 @@
}
},
"node_modules/prettier": {
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz",
"integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true,
"license": "MIT",
"bin": {
@ -1547,9 +1543,9 @@
}
},
"node_modules/prettier-plugin-svelte": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.3.2.tgz",
"integrity": "sha512-kRPjH8wSj2iu+dO+XaUv4vD8qr5mdDmlak3IT/7AOgGIMRG86z/EHOLauFcClKEnOUf4A4nOA7sre5KrJD4Raw==",
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.3.3.tgz",
"integrity": "sha512-yViK9zqQ+H2qZD1w/bH7W8i+bVfKrD8GIFjkFe4Thl6kCT9SlAsXVNmt3jCvQOCsnOhcvYgsoVlRV/Eu6x5nNw==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@ -1665,20 +1661,21 @@
}
},
"node_modules/svelte": {
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.16.0.tgz",
"integrity": "sha512-Ygqsiac6UogVED2ruKclU+pOeMThxWtp9LG+li7BXeDKC2paVIsRTMkNmcON4Zejerd1s5sZHWx6ZtU85xklVg==",
"version": "5.25.8",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.25.8.tgz",
"integrity": "sha512-yRmjmT5rgCZUMfCKS5varGlSe/nQyr2oClyIirbBChfTFc00YjVAyVWo1zOH74La3hi5KRSkNJKncyJ04PwIYA==",
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.3.0",
"@jridgewell/sourcemap-codec": "^1.5.0",
"@sveltejs/acorn-typescript": "^1.0.5",
"@types/estree": "^1.0.5",
"acorn": "^8.12.1",
"acorn-typescript": "^1.4.13",
"aria-query": "^5.3.1",
"axobject-query": "^4.1.0",
"clsx": "^2.1.1",
"esm-env": "^1.2.1",
"esrap": "^1.3.2",
"esrap": "^1.4.6",
"is-reference": "^3.0.3",
"locate-character": "^3.0.0",
"magic-string": "^0.30.11",
@ -2163,10 +2160,11 @@
"license": "ISC"
},
"node_modules/vite": {
"version": "5.4.11",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz",
"integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==",
"version": "5.4.17",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.17.tgz",
"integrity": "sha512-5+VqZryDj4wgCs55o9Lp+p8GE78TLVg0lasCH5xFZ4jacZjtqZa6JUw9/p0WeAojaOfncSM6v77InkFPGnvPvg==",
"dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "^0.21.3",
"postcss": "^8.4.43",

View File

@ -1,6 +1,6 @@
{
"name": "website",
"version": "6.0",
"version": "6.2",
"private": true,
"scripts": {
"dev": "vite dev",
@ -10,10 +10,10 @@
"format": "prettier --write ."
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.3.1",
"@sveltejs/adapter-auto": "^4.0.0",
"@sveltejs/adapter-node": "^5.2.11",
"@sveltejs/kit": "^2.15.1",
"@sveltejs/vite-plugin-svelte": "^5.0.0",
"@sveltejs/vite-plugin-svelte": "^4.0.3",
"prettier": "^3.4.2",
"prettier-plugin-svelte": "^3.3.2",
"svelte": "^5.16.0",

View File

@ -1,9 +1,9 @@
import { urljoin } from "$lib/util.js";
import { urljoin, env_url } from "$lib/util.js";
const api_version = "v1";
const api_url = urljoin(import.meta.env.WEBSITE_API_URL, api_version);
function api_urljoin(path = null, query = {}) {
let api_url = urljoin(env_url("API"), api_version);
return urljoin(api_url, path, query);
}

View File

@ -1,4 +1,4 @@
import { urljoin } from "$lib/util.js";
import { urljoin, env_url } from "$lib/util.js";
function doc_urljoin(path = null, query = {}) {
return urljoin(import.meta.env.WEBSITE_DOC_URL, path, query);

View File

@ -1,5 +1,5 @@
<script>
import { urljoin, color, date_from_ts } from "$lib/util.js";
import { app_url, color, date_from_ts } from "$lib/util.js";
import { api_get_metrics } from "$lib/api.js";
import Link from "$lib/link.svelte";
@ -14,44 +14,30 @@
</script>
<footer style="border-top: solid 2px var(--{color()});">
<div class="info">
<div class="links">
<span>
<Link link={import.meta.env.WEBSITE_SOURCE_URL} bold={true}>{$_("footer.source")}</Link>
</span>
<span>/</span>
<span>
<Link link={urljoin(import.meta.env.WEBSITE_APP_URL, "doc/license")} bold={true}
>{$_("footer.license")}</Link
>
</span>
<span>/</span>
<span>
<Link link={urljoin(import.meta.env.WEBSITE_APP_URL, "doc/privacy")} bold={true}
>{$_("footer.privacy")}</Link
>
</span>
</div>
<div class="links">
<span>
{$_("footer.powered")}
</span>
</div>
<div class="useless">
<span>
{$_("footer.number", {
values: {
total: data.total,
since: date_from_ts(data.since),
},
})}
{#if data.number % 1000 == 0}
<span style="color: var(--{color()})">({$_("footer.wow")})</span>
{/if}
</span>
<span>
{$_("footer.version", { values: { api_version: "v1", frontend_version: pkg.version } })}
<Link link={import.meta.env.WEBSITE_SOURCE_URL} bold={true}>{$_("footer.source")}</Link>
</span>
<span>/</span>
<span>
<Link link={app_url("/doc/license")} bold={true}>{$_("footer.license")}</Link>
</span>
<span>/</span>
<span>
<Link link={app_url("/doc/privacy")} bold={true}>{$_("footer.privacy")}</Link>
</span>
</div>
<span class="counter">
{$_("footer.number", {
values: {
total: data.total,
since: date_from_ts(data.since),
},
})}
{#if data.number % 1000 == 0}
<span style="color: var(--{color()})">({$_("footer.wow")})</span>
{/if}
</span>
</footer>
<style>
@ -61,27 +47,29 @@
justify-content: space-between;
align-items: center;
background: var(--black-1);
box-sizing: border-box;
padding: 20px 50px 20px 50px;
}
div {
display: flex;
color: var(--white-2);
font-size: var(--size-2);
flex-direction: column;
gap: 5px;
}
.useless {
margin: 25px 50px 25px 0;
span {
color: var(--white-2);
font-size: 15px;
}
.counter {
text-align: right;
}
.info {
margin: 25px 0 25px 50px;
.links {
text-align: left;
}
.info .links {
display: flex;
flex-direction: row;
gap: 5px;

View File

@ -8,15 +8,20 @@
<svelte:head>
<title>[ngn.tf] | {title}</title>
<meta content="[ngn.tf] | {title}" property="og:title" />
<meta content={desc} property="og:description" />
<meta content={app_url()} property="og:url" />
<meta content="#000000" data-react-helmet="true" name="theme-color" />
<meta name="description" content={desc} />
<meta name="author" content="ngn" />
<meta name="keywords" content="ngn,ngn13,ngn1,ngn.tf" />
<meta name="color-scheme" content="only dark" />
<meta name="theme-color" content="#000000" />
<meta property="og:title" content="[ngn.tf] | {title}" />
<meta property="og:description" content={desc} />
<meta property="og:url" content={app_url()} />
<link
rel="alternate"
type="application/atom+xml"
href={api_urljoin("/news/en")}
title="Atom Feed"
title="Service news and updates"
/>
</svelte:head>

View File

@ -1,14 +1,35 @@
<script>
import { browser } from "$app/environment";
import { color } from "$lib/util.js";
import { _ } from "svelte-i18n";
export let picture = "";
export let title = "";
let title_cur = "";
function animate(title) {
if (!browser) return;
let id = window.setTimeout(function () {}, 0);
while (id--) clearTimeout(id);
title_cur = "";
for (let i = 0; i < title.length; i++) {
setTimeout(() => {
title_cur += title[i];
}, i * 70);
}
}
$: animate(title);
</script>
<header>
<div>
<h1 class="title" style="color: var(--{color()})">{title.toLowerCase()}</h1>
<h1 class="title" style="color: var(--{color()})">{title_cur}</h1>
<h1 class="cursor" style="color: var(--{color()})">_</h1>
</div>
<img src="/profile/{picture}.png" alt="" />
@ -50,9 +71,6 @@
header div .title {
text-shadow: var(--text-shadow);
overflow: hidden;
width: 0;
animation: typing 1s steps(20, end) forwards;
animation-delay: 0.3s;
}
header div .cursor {

View File

@ -1,4 +1,6 @@
import { locale_from_browser } from "$lib/locale.js";
import { browser } from "$app/environment";
import { page } from "$app/state";
const colors = [
"yellow",
@ -19,7 +21,7 @@ function color() {
}
function click() {
let audio = new Audio("/click.wav");
let audio = new Audio("/assets/click.wav");
audio.play();
}
@ -39,8 +41,18 @@ function urljoin(url, path = null, query = {}) {
return url.href;
}
function env_url(prefix) {
let host = "";
if (browser) host = window.location.hostname;
if (host.endsWith(".onion")) return import.meta.env["WEBSITE_" + prefix + "_URL_ONION"];
else if (host.endsWith(".i2p")) return import.meta.env["WEBSITE_" + prefix + "_URL_I2P"];
else return import.meta.env["WEBSITE_" + prefix + "_URL_CLEAR"];
}
function app_url(path = null, query = {}) {
return urljoin(import.meta.env.WEBSITE_APP_URL, path, query);
return urljoin(env_url("APP"), path, query);
}
function time_from_ts(ts) {
@ -68,4 +80,4 @@ function date_from_ts(ts) {
}).format(new Date(ts * 1000));
}
export { color, click, urljoin, app_url, time_from_ts, date_from_ts };
export { color, click, urljoin, env_url, app_url, time_from_ts, date_from_ts };

View File

@ -5,7 +5,7 @@
"donate": "donate"
},
"home": {
"title": "Hello world!",
"title": "hello world!",
"welcome": {
"title": "about",
"desc": "Welcome to my website, I'm ngn",
@ -29,9 +29,9 @@
},
"services": {
"title": "services",
"desc": "A part from working on stupid shit, I host free (as in freedom, and price) services available for all",
"speed": "All of these services are available over a 600 Mbit/s interface",
"security": "All use SSL encrypted connection and they are all privacy-respecting",
"desc": "A part from working on stupid shit, I host free (as in freedom and price) services available for all",
"speed": "All of these services are available over an 1 Gbit interface",
"security": "All use SSL encrypted connection and they respect your privacy and freedom",
"privacy": "Accessible from clearnet, TOR and I2P, no region or network blocks",
"bullshit": "No CDNs, no cloudflare, no CAPTCHA, no analytics, no bullshit",
"link": "See all the services!"
@ -42,7 +42,7 @@
}
},
"services": {
"title": "Service Status",
"title": "service status",
"none": "No services found",
"search": "Search for a service",
"feed": "News and updates",
@ -54,7 +54,7 @@
}
},
"donate": {
"title": "Donate Money!",
"title": "donate!",
"info": "I spend a lot of time and money on different projects and maintaining different services.",
"price": "I mostly pay for hosting and electricity. Which when added up costs around 550₺ per month (~$15 at the time of writing).",
"details": "So even a small donation would be useful. And it would help me keep everything up and running.",
@ -64,20 +64,15 @@
"address": "Adress/Link"
}
},
"doc": {
"title": "Documentation"
},
"error": {
"title": "Something went wrong!",
"title": "something went wrong!",
"report": "Report this issue"
},
"footer": {
"source": "Source",
"license": "License",
"privacy": "Privacy",
"powered": "Powered by Svelte, Go, SQLite and donations",
"number": "Visited {total} times since {since}",
"wow": "wow!!",
"version": "Using API version {api_version}, frontend version {frontend_version}"
"wow": "wow!!"
}
}

View File

@ -5,7 +5,7 @@
"donate": "bağış"
},
"home": {
"title": "Merhaba Dünya!",
"title": "merhaba dünya!",
"welcome": {
"title": "hakkımda",
"desc": "Websiteme hoşgeldiniz, ben ngn",
@ -30,11 +30,10 @@
"services": {
"title": "servisler",
"desc": "Salak şeyler inşa etmenin yanı sıra, herkes için kullanıma açık özgür ve ücretsiz servisler host ediyorum",
"speed": "Tüm servisler 600 Mbit/s ağ arayüzü üzerinden erişilebilir",
"security": "Hepsi SSL şifreli bağlantı kullanıyor ve hepsi gizliğinize önem veriyor",
"privacy": "Accessible from clearnet, TOR and I2P, no region or network blocks",
"speed": "Tüm servisler 1 Gbit ağ arayüzü üzerinden erişilebilir",
"security": "Hepsi SSL şifreli bağlantı kullanıyor ve hepsi gizliliğinize ve özgürlüğünüze saygı gösteriyor",
"privacy": "Açık ağdan, TOR ve I2P'den erişilebilirler, bölge ya da ağ blokları yok",
"bullshit": "CDN yok, cloudflare yok, CAPTCHA yok, analitikler yok, boktan saçmalıklar yok",
"bullshit": "CDN yok, cloudflare yok, CAPTCHA yok, analitikler ve diğer saçmalıklar yok",
"link": "Tüm servisleri incele!"
},
"projects": {
@ -43,7 +42,7 @@
}
},
"services": {
"title": "Servis Durumu",
"title": "servis durumu",
"none": "Servis bulunamadı",
"search": "Bir servisi ara",
"feed": "Yenilikler ve güncellemeler",
@ -55,7 +54,7 @@
}
},
"donate": {
"title": "Para Bağışla!",
"title": "bağış yap!",
"info": "Farklı projeler ve farklı servisleri yönetmek için oldukça zaman ve para harcıyorum.",
"price": "Çoğunlukla hosting ve elektrik için ödeme yapıyorum. Bunlar eklendiği zaman aylık 550₺ civarı bir miktar oluyor (yazdığım sırada ~15$).",
"details": "Bu sebepten küçük bir bağış bile oldukça faydalı olacaktır. Ve herşeyi açık ve çalışmakta tutmama yardımcı olacaktır.",
@ -65,20 +64,15 @@
"address": "Adres/Bağlantı"
}
},
"doc": {
"title": "Dökümantasyon"
},
"error": {
"title": "Birşeyler yanlış gitti!",
"title": "birşeyler yanlış gitti!",
"report": "Bu sorunu raporlayın"
},
"footer": {
"source": "Kaynak",
"license": "Lisans",
"privacy": "Gizlilik",
"powered": "Svelte, Go, SQLite ve bağışlar tarafından destekleniyor",
"number": "{since} tarihinden beri {total} kez ziyaret edildi",
"wow": "vay be!!",
"version": "Kullan API versiyonu {api_version}, arayüz versiyonu {frontend_version}"
"wow": "vay be!!"
}
}

View File

@ -21,7 +21,7 @@
</main>
<style>
@import "/global.css";
@import "/css/global.css";
main {
display: flex;

View File

@ -1,14 +1,22 @@
<script>
import { api_version } from "$lib/api.js";
import Header from "$lib/header.svelte";
import Error from "$lib/error.svelte";
import Head from "$lib/head.svelte";
import Card from "$lib/card.svelte";
import Link from "$lib/link.svelte";
import { browser } from "$app/environment";
import { _, locale } from "svelte-i18n";
import { color } from "$lib/util.js";
let { data } = $props();
if (browser) {
window._version = {};
window._version.app = pkg.version;
window._version.api = api_version;
}
</script>
<Head title="home" desc="home page of my personal website" />

View File

@ -1,9 +1,8 @@
import { doc_get_list, doc_get } from "$lib/doc";
import { doc_get } from "$lib/doc";
export async function load({ fetch, params }) {
try {
return {
docs: await doc_get_list(fetch),
doc: await doc_get(fetch, params.name),
error: "",
};

View File

@ -22,7 +22,7 @@
</script>
<Head title="documentation" desc="website and API documentation" />
<Header picture="reader" title={$_("doc.title")} />
<Header picture="reader" title={data.doc[$locale].title} />
{#if data.error.length !== 0}
{#if !data.error.includes("not found")}
@ -30,94 +30,21 @@
{/if}
{:else}
<main>
{#if data.doc !== undefined}
<div class="markdown-body" style="--link-color: var(--{color()})">
{@html marked.parse(data.doc[$locale].content)}
</div>
<div class="docs">
{#each data.docs[$locale] as doc}
{#if doc.title == data.doc[$locale].title}
<a href="/doc/{doc.name}" style="border-color: var(--{color()})">
<h1>{doc.title}</h1>
<h3>{doc.desc}</h3>
</a>
{:else}
<a href="/doc/{doc.name}" style="border-color: var(--white-3)">
<h1>{doc.title}</h1>
<h3>{doc.desc}</h3>
</a>
{/if}
{/each}
</div>
{/if}
<div class="markdown-body" style="--link-color: var(--{color()})">
{@html marked.parse(data.doc[$locale].content)}
</div>
</main>
{/if}
<style>
@import "/markdown.css";
@import "/css/markdown.css";
main {
padding: 50px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: start;
gap: 30px;
}
main .docs {
display: flex;
flex-direction: column;
align-items: end;
gap: 6px;
}
main .docs a {
display: flex;
flex-direction: column;
background: var(--black-3);
text-decoration: none;
box-sizing: border-box;
border-right-style: solid;
padding: 15px;
width: 100%;
gap: 4px;
}
main .docs a:hover {
box-shadow: var(--box-shadow-2);
}
main .docs a h1 {
font-size: var(--size-3);
color: var(--white-1);
font-weight: 900;
}
main .docs a h3 {
font-size: var(--size-2);
color: var(--white-3);
font-weight: 100;
text-decoration: none;
}
main .markdown-body :global(a) {
color: var(--link-color);
}
@media only screen and (max-width: 900px) {
main {
flex-direction: column-reverse;
}
main .docs {
width: 100%;
}
main .docs a {
border-right-style: none;
border-left-style: solid;
width: 100%;
}
}
</style>

View File

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -9,13 +9,3 @@
border-color: transparent;
}
}
@keyframes typing {
from {
width: 0%;
}
to {
width: 100%;
}
}

7
app/static/css/font.css Normal file
View File

@ -0,0 +1,7 @@
@font-face {
font-family: "Ubuntu";
font-style: normal;
font-weight: 300;
font-display: swap;
src: url("/assets/ubuntu.woff2") format("woff2");
}

View File

@ -1,4 +1,12 @@
/*
* animations.css: stuff like the cursor animation
* webfont.css: webfont dumped from https://www.nerdfonts.com/assets/css/webfont.css
* font.css: the main font (Ubuntu)
*/
@import "./animations.css";
@import "./nerdfonts.css";
@import "./font.css";
:root {
@ -31,7 +39,8 @@
rgba(20, 20, 20, 0.3) 0px 18px 36px -18px inset;
--text-shadow: 3px 2px 8px rgba(50, 50, 50, 0.8);
--background: linear-gradient(rgba(11, 11, 11, 0.808), rgba(1, 1, 1, 0.96)), url("/banner.png");
--background: linear-gradient(rgba(11, 11, 11, 0.808), rgba(1, 1, 1, 0.96)),
url("/assets/banner.png");
--profile-size: 220px;
}

View File

@ -1,10 +0,0 @@
/* im using nerd fonts btw */
@import "https://www.nerdfonts.com/assets/css/webfont.css";
@font-face {
font-family: "Ubuntu";
font-style: normal;
font-weight: 300;
font-display: swap;
src: url("/ubuntu.woff2") format("woff2");
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 22 KiB

2
app/static/robots.txt Normal file
View File

@ -0,0 +1,2 @@
User-Agent: *
Disallow: /doc/

View File

@ -3,21 +3,44 @@ import { defineConfig } from "vite";
import { fileURLToPath } from "url";
import { readFileSync } from "fs";
function env_from(prefix, object) {
for (const [key, value] of Object.entries(object)) {
let type = typeof value;
let name = prefix + "_" + key.toUpperCase();
switch (type) {
case "object":
env_from(name, value);
break;
case "string":
if (process.env[name] === undefined) process.env[name] = value;
break;
}
}
}
const default_env = {
REPORT_URL: "https://github.com/ngn13/website/issues",
SOURCE_URL: "https://github.com/ngn13/website",
APP_URL: "http://localhost:7001",
API_URL: "http://localhost:7002",
DOC_URL: "http://localhost:7003",
source_url: "https://git.ngn.tf/ngn/website",
report_url: "https://git.ngn.tf/ngn/website/issues",
doc_url: "http://localhost:7003",
app_url: {
clear: "http://localhost:7001",
onion: "",
i2p: "",
},
api_url: {
clear: "http://localhost:7002",
onion: "",
i2p: "",
},
};
const file = fileURLToPath(new URL("package.json", import.meta.url));
const json = readFileSync(file, "utf8");
const pkg = JSON.parse(json);
const package_file = fileURLToPath(new URL("package.json", import.meta.url));
const package_json = readFileSync(package_file, "utf8");
const package_data = JSON.parse(package_json);
for (let env in default_env) {
if (process.env["WEBSITE_" + env] === undefined) process.env["WEBSITE_" + env] = default_env[env];
}
env_from("WEBSITE", default_env);
export default defineConfig({
plugins: [sveltekit()],
@ -31,6 +54,6 @@ export default defineConfig({
strictPort: true,
},
define: {
pkg: pkg,
pkg: package_data,
},
});

BIN
assets/6.0_index.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

BIN
assets/6.0_services.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

View File

@ -5,10 +5,17 @@ services:
build:
context: ./app
args:
# app URLs
WEBSITE_APP_URL_CLEAR: "http://localhost:7001"
WEBSITE_APP_URL_ONION: ""
WEBSITE_APP_URL_I2P: ""
# API URLs
WEBSITE_API_URL_CLEAR: "http://localhost:7002"
WEBSITE_API_URL_ONION: ""
WEBSITE_API_URL_I2P: ""
# other
WEBSITE_SOURCE_URL: "http://github.com/ngn13/website"
WEBSITE_REPORT_URL: "http://github.com/ngn13/website/issues"
WEBSITE_APP_URL: "http://localhost:7001"
WEBSITE_API_URL: "http://localhost:7002"
WEBSITE_DOC_URL: "http://doc:7003"
security_opt:
- "no-new-privileges:true"
@ -16,10 +23,11 @@ services:
- ALL
ports:
- "127.0.0.1:7001:7001"
restart: unless-stopped
depends_on:
- api
- doc
read_only: true
restart: unless-stopped
api:
container_name: "website_api"
@ -34,28 +42,28 @@ services:
- "127.0.0.1:7002:7002"
volumes:
- ./data.db:/api/data.db:rw
restart: unless-stopped
environment:
WEBSITE_DEBUG: "false"
WEBSITE_APP_URL: "http://localhost:7001/"
WEBSITE_APP_URL_CLEAR: "http://localhost:7001/"
WEBSITE_PASSWORD: "change_me"
WEBSITE_HOST: "0.0.0.0:7002"
WEBSITE_IP_HEADER: "X-Real-IP"
WEBSITE_INTERVAL: "1h"
WEBSITE_TIMEOUT: "15s"
WEBSITE_LIMIT: "5s"
restart: unless-stopped
doc:
container_name: "website_doc"
image: website_doc
read_only: true
build:
context: ./doc
security_opt:
- "no-new-privileges:true"
cap_drop:
- ALL
restart: unless-stopped
environment:
WEBSITE_HOST: "0.0.0.0:7003"
WEBSITE_DOCS_DIR: "./docs"
read_only: true
restart: unless-stopped

View File

@ -1,4 +1,4 @@
{
"title": "API documentation",
"title": "API",
"desc": "Website's API documentation"
}

View File

@ -1,6 +1,7 @@
My website's API stores information about my self-hosted services, it also allows me to
publish news and updates about these services using an Atom feed and it keeps track of
visitor metrics. The API itself is written in Go and uses SQLite for storage.
My website's API, [api.ngn.tf](https://api.ngn.tf), stores information about my
self-hosted services, it also allows me to publish news and updates about these
services using an Atom feed and it keeps track of visitor metrics. The API itself is
written in Go and uses SQLite for storage.
This documentation contains information about all the available API endpoints.

View File

@ -1,4 +1,4 @@
{
"title": "API dökümantasyonu",
"title": "API",
"desc": "Websitesinin API dökümantasyonu"
}

View File

@ -1,6 +1,7 @@
Websitemin API self-host edilen servisler hakkında bilgileri tutuyor, bu servisler hakkında
haberleri ve güncellemeleri bir Atom feed'i aracılığı ile paylaşmama izin veriyor ve ziyartçi
metriklerini takip ediyor. API'ın kendisi Go ile yazıldı ve veritabanı olarak SQLite kullanıyor.
Websitemin API, [api.ngn.tf](https://api.ngn.tf), self-host edilen servisler hakkında bilgileri
tutuyor, bu servisler hakkında haberleri ve güncellemeleri bir Atom feed'i aracılığı ile
paylaşmama izin veriyor ve ziyartçi metriklerini takip ediyor. API'ın kendisi Go ile yazıldı ve
veritabanı olarak SQLite kullanıyor.
Bu dökümentasyon tüm erişeme açık API endpoint'leri hakkında bilgiler içeriyor.

View File

@ -1,4 +1,4 @@
{
"title": "License",
"title": "source license",
"desc": "Source code license"
}

View File

@ -1,4 +1,4 @@
{
"title": "Lisans",
"title": "kaynak lisansı",
"desc": "Kaynak kodu lisansı"
}

View File

@ -1,4 +1,4 @@
{
"title": "Privacy",
"title": "privacy",
"desc": "Learn how I respect your privacy"
}

View File

@ -1,4 +1,4 @@
{
"title": "Gizlilik",
"title": "gizlilik",
"desc": "Gizliliğinize nasıl önem verdiğimi öğrenin"
}

View File

@ -10,6 +10,7 @@
#include "util.h"
option_t options[] = {
// name value requied
{"host", "0.0.0.0:7003", true }, // host the server should listen on
{"docs_dir", "./docs", true }, // documentation directory
{"", NULL, false},

View File

@ -13,7 +13,11 @@ int main() {
if (!config_load(&conf))
return EXIT_FAILURE;
host = config_get(&conf, "host");
if (NULL == (host = config_get(&conf, "host"))) {
ctorm_fail("failed to get the host configuration");
return EXIT_FAILURE;
}
ctorm_config_new(&app_config);
app_config.disable_logging = true;
@ -22,7 +26,6 @@ int main() {
// middlewares
MIDDLEWARE_ALL(app, "/*", route_cors);
MIDDLEWARE_ALL(app, "/*/*", route_cors);
MIDDLEWARE_ALL(app, "/*/*/*", route_cors);
// routes
GET(app, "/list", route_list);