Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
ae26679
feat: port metrics to miiverse-api + add API to fetch metrics
mrjvs Apr 19, 2026
ebf50cb
feat: remove duplicate metrics from juxtaposition-ui and use API to f…
mrjvs Apr 19, 2026
862dac3
feat: add missing indexes on miiverse-api models
mrjvs Apr 19, 2026
13838d7
Merge branch 'feat/port-admin-datasource' into feat/port-last-datasou…
mrjvs Apr 19, 2026
936a93d
feat: add more context to post and report dtos
mrjvs Apr 19, 2026
edcf95c
feat: add extra context to noticiations
mrjvs Apr 19, 2026
353c561
feat: add all users to notificationDto
mrjvs Apr 19, 2026
4d49283
feat: port topic pages to internal API
mrjvs Apr 19, 2026
026edaa
feat: remove requirement for cache in newPostView
mrjvs Apr 19, 2026
dc30246
feat: remove requirement for cache in notifications
mrjvs Apr 19, 2026
7012b6e
feat: remove requirement for cache in post view
mrjvs Apr 19, 2026
18a10c0
feat: remove requirement for cache in moderation pages
mrjvs Apr 19, 2026
36d6862
feat: add friend request support to internal API
mrjvs Apr 19, 2026
39ba6a9
feat: use miiverse-api for friend request views
mrjvs Apr 19, 2026
03771d1
chore: remove caching system from juxtaposition-ui
mrjvs Apr 19, 2026
845e9de
feat: add server status to internal API
mrjvs Apr 19, 2026
1838f27
feat: make endpoint discovery pull from miiverse-api
mrjvs Apr 19, 2026
cc0af97
feat: removed missed usage of discovery endpoints
mrjvs Apr 19, 2026
525c414
feat: introduce reporting and post creation to miiverse internal API
mrjvs Apr 19, 2026
bd7f7fb
feat: implement new endpoint for reporting into frontend
mrjvs Apr 19, 2026
a305963
feat: implement posting in internal miiverse-api
mrjvs Apr 19, 2026
6a32330
feat: add GDPR export to miiverse-api internal API
mrjvs Apr 19, 2026
685754c
Merge branch 'feat/port-admin-datasource' into feat/port-last-datasou…
mrjvs Apr 29, 2026
d57cf8c
fix: reimplement automod in new endpoints
mrjvs Apr 29, 2026
9368035
chore: use new error codes system
mrjvs Apr 29, 2026
a9f6e75
feat: remove useCache dependency from automod changes
mrjvs Apr 29, 2026
4d2261e
Merge branch 'dev' into feat/port-last-datasources-bits
mrjvs May 5, 2026
4750976
Merge branch 'dev' into feat/port-last-datasources-bits
mrjvs May 16, 2026
34805a5
Merge branch 'dev' into feat/port-last-datasources-bits
mrjvs May 23, 2026
deee88d
fix: fix compile errors
mrjvs May 23, 2026
710ba58
feat: rework post model in internal API
mrjvs May 24, 2026
267744c
feat: update juxt-ui with new post DTO
mrjvs May 24, 2026
ca777f2
feat: move community following to internal API
mrjvs May 24, 2026
626c489
feat: move onboarding to internal API
mrjvs May 24, 2026
21780a4
feat: move user settings editing to internal API
mrjvs May 24, 2026
14f6e0e
chore: remove all unused packages and database code
mrjvs May 24, 2026
180853a
fix: fixed compile errors in user settings view
mrjvs May 24, 2026
0e09e52
fix: incorrect query for user settings
mrjvs May 28, 2026
c9c03d3
fix: fix error on creation of posts
mrjvs May 29, 2026
8eb3c7c
fix: fixed fresh community posts not having mod info attached
mrjvs May 29, 2026
cce4c43
fix: fixed user settings not saving
mrjvs May 29, 2026
d5aaf77
feat: only show allow oembed if it's not deleted
mrjvs May 29, 2026
c09a1d6
fix: fixed topic page loading
mrjvs May 29, 2026
15eae92
fix: fixed broken CSS for topics
mrjvs May 29, 2026
ff78a21
fix: add fallback for notification users
mrjvs May 29, 2026
19970f8
web: Bandwidth Alert Image No Longer Has a Static Background
Joshua8600 Jun 19, 2026
4e1f693
style(web): Center Bandwidth Icon on Notifications Page
Joshua8600 Jun 19, 2026
9082a46
locales(update): Updated German locale
Nervi05 Jun 25, 2026
ea796e0
locales(update): Updated Chinese (Simplified Han script) locale
Jun 27, 2026
de90ca0
fix: make subcommunity list the same as normal community list
mrjvs Jun 28, 2026
067509f
fix: Fix created_at fields in db models + migration to fix existing d…
mrjvs Jun 28, 2026
aa6d513
fix: add report modal to moderate user view
mrjvs Jun 28, 2026
bc8dc95
feat: added buttons for marking and removing spoilers for moderators
mrjvs Jun 28, 2026
484ed20
feat: add backend for unspoilering/spoilering posts
mrjvs Jun 28, 2026
498ef4e
locales(update): Updated Catalan locale
KorvusDev Jun 28, 2026
1c5821b
Merge pull request #552 from PretendoNetwork/feat/bugfix-time
binaryoverload Jun 29, 2026
d844e6c
Merge branch 'dev' into feat/port-last-datasources-bits
mrjvs Jun 30, 2026
e950c49
Merge branch 'dev' into feat/port-last-datasources-bits
mrjvs Jun 30, 2026
ae8732b
Rename migration so it's nicely numbered
mrjvs Jun 30, 2026
ba6b969
feat: allow posting on web
mrjvs Jun 30, 2026
07a5d06
feat: add reply sorting & add posting buttons on web for moderators
mrjvs Jun 30, 2026
3934dd6
chore: remove broken cancel button
mrjvs Jun 30, 2026
2c2c511
feat: add postgres ORM
mrjvs Jul 2, 2026
decedf0
chore: add prisma to context
mrjvs Jul 2, 2026
a26e706
feat: port notification model to postgres in api
mrjvs Jul 2, 2026
03e04e8
feat: implement new notification DTO
mrjvs Jul 2, 2026
e415608
chore: fix db init bugs
mrjvs Jul 2, 2026
ed25a4f
feat: make juxtaposition-ui use the new notification dto
mrjvs Jul 2, 2026
e94cf37
feat: add postDeleted and limitedFromPosting notification type
mrjvs Jul 2, 2026
dee59d6
chore: fixed docker compose using wrong init
mrjvs Jul 2, 2026
02961fb
fix: add post ID to post deletion i18n keys
mrjvs Jul 2, 2026
5b81cb9
fix: fix invalid date rendering on limitedFromPosting notifications
mrjvs Jul 2, 2026
803633a
feat: add database migration
mrjvs Jul 2, 2026
ed8d457
chore: update all new_follower translations to the new path
mrjvs Jul 2, 2026
db01ccc
chore: add postinstall for prisma types
mrjvs Jul 2, 2026
fc8d753
chore: allow prisma generate to run without config
mrjvs Jul 2, 2026
7ff7f33
chore: made db connection url as optional
mrjvs Jul 2, 2026
12f1216
chore: remove bundle analysis CI, it's broken
mrjvs Jul 2, 2026
749f28b
feat: add data migration for notifications
mrjvs Jul 2, 2026
8483e0b
chore: clean up exports on fields that only locally used
mrjvs Jul 2, 2026
9011348
fix: more explicit truthyness check
mrjvs Jul 2, 2026
59991da
chore: improve clarity on community type checks
mrjvs Jul 2, 2026
8e18509
Merge pull request #488 from PretendoNetwork/feat/port-last-datasourc…
binaryoverload Jul 2, 2026
68e6205
Merge pull request #545 from PretendoNetwork/weblate
binaryoverload Jul 2, 2026
3dda894
Merge branch 'dev' into feat/spoiler-edit
mrjvs Jul 2, 2026
0dfa99a
Merge branch 'dev' into feat/web-posting
mrjvs Jul 2, 2026
060c178
fix: remove useCache from newPostView
mrjvs Jul 2, 2026
d25c06d
fix: use new isSpoiler property
mrjvs Jul 2, 2026
009761a
Merge pull request #553 from PretendoNetwork/feat/spoiler-edit
binaryoverload Jul 2, 2026
5cf9849
Merge branch 'dev' into feat/web-posting
binaryoverload Jul 2, 2026
edaf6d2
Merge pull request #555 from PretendoNetwork/feat/web-posting
binaryoverload Jul 2, 2026
6399c04
fix: prevent usage of unstable community IDs + fix type generation er…
mrjvs Jul 2, 2026
54a2583
fix: fixed duplicate user in follower notification
mrjvs Jul 3, 2026
d3b8c25
feat: restyle reply-age-sorter
mrjvs Jul 3, 2026
67f3773
Merge branch 'dev' into feat/notifications-rework
mrjvs Jul 3, 2026
f2fe65d
fix: fix duplicate users in migrated notifications
mrjvs Jul 3, 2026
e76a0be
chore: extract date parsing into separate method
mrjvs Jul 3, 2026
43d783b
locales(update): Updated Russian locale
Sephirot101 Jul 3, 2026
e271326
locales(update): Updated Russian locale
Sephirot101 Jul 3, 2026
eb70b4c
locales(update): Updated Russian locale
Sephirot101 Jul 3, 2026
5f37569
locales(update): Updated Russian locale
Sephirot101 Jul 3, 2026
4e18087
locales(update): Updated Spanish locale
wiiugamerj Jul 4, 2026
a35f554
locales(update): Updated Russian locale
Sephirot101 Jul 3, 2026
8456044
locales(update): Updated Russian locale
Jul 3, 2026
5f051ae
feat: Parse Date Strings into Date Object
Joshua8600 Jul 5, 2026
2882c30
Merge branch 'bandwidth-notification-fixes' of github.com:Joshua8600/…
Joshua8600 Jul 5, 2026
ff6f782
Merge pull request #561 from Joshua8600/date-format-new
mrjvs Jul 5, 2026
8fb6c6e
Merge pull request #563 from Joshua8600/bandwidth-notification-fixes
binaryoverload Jul 5, 2026
534ba98
Merge pull request #560 from PretendoNetwork/weblate
binaryoverload Jul 5, 2026
21c2cb1
fix: fixed misaligned topics icon
mrjvs Jul 5, 2026
e7e23a0
feat: clean up notification rendering into separate components
mrjvs Jul 5, 2026
4d03b16
Merge branch 'dev' into feat/notifications-rework
mrjvs Jul 5, 2026
2301aff
fix: add exit() callback back
mrjvs Jul 6, 2026
ca8e7c6
Merge branch 'dev' into fix/part-5-fixes
mrjvs Jul 6, 2026
9431ed7
Merge pull request #559 from PretendoNetwork/fix/part-5-fixes
binaryoverload Jul 6, 2026
adaa314
Merge branch 'dev' into feat/notifications-rework
mrjvs Jul 6, 2026
7c6ad8c
Merge pull request #557 from PretendoNetwork/feat/notifications-rework
binaryoverload Jul 6, 2026
2b8ebc6
Add New Reasons to English Locale
Joshua8600 Jul 7, 2026
a50f79c
Update Report Options and Labels
Joshua8600 Jul 7, 2026
8d4920b
Update Reporting Description in English Locale
Joshua8600 Jul 7, 2026
c89c5cc
fix: Report Reason Values Align with Util Array Index
Joshua8600 Jul 7, 2026
570a5c0
Fix "Other" Value Having Wrong Index
Joshua8600 Jul 7, 2026
7b12b46
Added Succesful Report Toast
DevDrew64 Jul 7, 2026
79ea841
Fixed Lint Job Fail
DevDrew64 Jul 7, 2026
2364326
fix: allow report reason to be empty
mrjvs Jul 7, 2026
c1c809b
Merge pull request #566 from Joshua8600/report-reasons-dropdown-NEW
mrjvs Jul 7, 2026
b159b8f
Merge branch 'dev' into dev
mrjvs Jul 7, 2026
a645d75
Merge branch 'dev' into fix/report-reason-empty
binaryoverload Jul 7, 2026
e2cde87
Merge pull request #568 from PretendoNetwork/fix/report-reason-empty
binaryoverload Jul 7, 2026
0c82855
fix: fixed report button on reply not working
mrjvs Jul 7, 2026
dcdf869
Merge branch 'dev' into dev
DevDrew64 Jul 9, 2026
fd9d234
Fixed Wiiu/3DS Reporting
DevDrew64 Jul 9, 2026
b084026
Fix Lint Issues
DevDrew64 Jul 10, 2026
20c0812
Merge pull request #567 from DevDrew64/dev
mrjvs Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .docker/create-dbs.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CREATE DATABASE friends;
CREATE DATABASE miiverse;
25 changes: 13 additions & 12 deletions .docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@ services:
- "6379:6379"
volumes:
- redis_data:/data
postgres:
image: postgres:18
restart: unless-stopped
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: "postgres"
POSTGRES_USER: "postgres"
POSTGRES_DB: "postgres"
volumes:
- "db_data:/var/lib/postgresql"
- ./create-dbs.sql:/docker-entrypoint-initdb.d/init.sql
mongo:
image: mongo:8.0
restart: unless-stopped
Expand Down Expand Up @@ -125,20 +137,9 @@ services:
PN_FRIENDS_ACCOUNT_GRPC_PORT: 8123
PN_FRIENDS_ACCOUNT_GRPC_API_KEY: "12345678123456781234567812345678"

postgres:
image: postgres
restart: unless-stopped
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: "postgres"
POSTGRES_USER: "postgres"
POSTGRES_DB: "friends"
volumes:
- "pg_data:/var/lib/postgresql"
volumes:
pg_data:
mongo_data:
mongo_config:
redis_data:
minio_data:
db_data:
37 changes: 0 additions & 37 deletions .github/workflows/bundle-analysis.yml

This file was deleted.

40 changes: 0 additions & 40 deletions .github/workflows/bundle-build.yml

This file was deleted.

1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ apps/juxtaposition-ui/webfiles/ctr/css/sprites.css
apps/juxtaposition-ui/webfiles/ctr/images/sprites.png
apps/juxtaposition-ui/src/api/generated
apps/miiverse-api/internal.openapi.json
apps/miiverse-api/src/prisma
6 changes: 4 additions & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
],
"eslint.format.enable": true,
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
"js/ts.preferences.importModuleSpecifier": "non-relative",
"[javascript]": {
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
},
Expand All @@ -18,12 +19,13 @@
"[html]": {
"editor.defaultFormatter": "vscode.html-language-features"
},
"javascript.preferences.importModuleSpecifier": "non-relative",
"typescript.preferences.importModuleSpecifier": "non-relative",
"[typescriptreact]": {
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
},
"[scss]": {
"editor.defaultFormatter": "vscode.css-language-features"
},
"[prisma]": {
"editor.defaultFormatter": "Prisma.prisma"
}
}
34 changes: 3 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,37 +13,9 @@ This means we both want to bring all features originally found in Miiverse into
- The web platforms on the 3DS and Wii U are old, thus we need to use old web methodologies like AJAX.
- The XML API of the Miiverse platform cannot be modified or extended, it needs to stay exactly as the consoles expect it.

# Running locally for development

Prerequisites:
- Clone the repository
- Have a functional running [account server](https://github.com/PretendoNetwork/account) and [friends server](https://github.com/PretendoNetwork/friends)
- Have NodeJS 20 or higher installed
- Optional: have docker installed (highly recommended)

After the prerequisites you need to run the following inside `.docker`:
```sh
docker compose up -d
```
If you are not using docker for development, please set up the services listed in `.docker/docker-compose.yml` manually.

Next up, you need to run the two services in `/apps`:
```bash
cd apps/miiverse-api
npm i
npm run dev
```

And in another terminal:
```bash
cd apps/juxtaposition-ui
npm i
npm run dev
```

You have to also make an `.env` file to configure your environment. Inspire it from the schema in `src/config.ts` in each service.

You can use `PN_JUXTAPOSITION_UI_USE_PRESETS=docker` and `PN_MIIVERSE_API_USE_PRESETS=docker` to automatically set up everything that's in the docker compose file.
# Development

Follow [this guide](./docs/development.md) on how to get set up for local development.

# Translation

Expand Down
5 changes: 5 additions & 0 deletions apps/juxtaposition-ui/eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ import { defineConfig } from 'eslint/config';

export default defineConfig([
...eslintConfig,
{
rules: {
'@stylistic/jsx-one-expression-per-line': 'off'
}
},
{
// Allow browser globals in webfiles
languageOptions: {
Expand Down
10 changes: 2 additions & 8 deletions apps/juxtaposition-ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
"start": "node --enable-source-maps dist/server.js"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.1004.0",
"@hey-api/openapi-ts": "^0.95.0",
"@imagemagick/magick-wasm": "^0.0.38",
"@neato/config": "^4.1.0",
Expand All @@ -31,17 +30,13 @@
"express-prom-bundle": "^7.0.2",
"express-rate-limit": "^8.2.1",
"express-session": "^1.19.0",
"hashmap": "^2.4.0",
"i18next": "^25.8.18",
"include-media": "github:eduardoboucas/include-media#78c6aeb",
"luxon": "^3.7.2",
"method-override": "^3.0.0",
"moment": "^2.30.1",
"mongoose": "^8.23.0",
"multer": "^2.1.1",
"nice-grpc": "^2.1.14",
"node-snowflake": "0.0.1",
"pako": "^2.1.0",
"pino": "^10.3.1",
"pino-http": "^11.0.0",
"pino-pretty": "^13.1.3",
Expand All @@ -51,7 +46,6 @@
"react-dom": "^19.2.4",
"react-i18next": "^16.5.8",
"redis": "^5.11.0",
"tsx": "^4.21.0",
"zod": "^4.3.6"
},
"devDependencies": {
Expand All @@ -65,7 +59,6 @@
"@repo/esbuild-plugin-spritesmith": "^0.0.0",
"@types/cookie-parser": "^1.4.10",
"@types/express-session": "^1.18.2",
"@types/hashmap": "^2.3.4",
"@types/luxon": "^3.7.1",
"@types/method-override": "^3.0.0",
"@types/node": "^24.12.0",
Expand All @@ -81,6 +74,7 @@
"nodemon": "^3.1.14",
"npm-run-all": "^4.1.5",
"tsup": "^8.5.1",
"tsx": "^4.21.0",
"typescript": "^5.9.3"
}
}
}
26 changes: 22 additions & 4 deletions apps/juxtaposition-ui/src/assets/locales/ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,14 @@
"user_page": "Pàgina d'usuari",
"go_back": "Torna",
"yeahs": "Mola",
"search": "Cerca..."
"search": "Cerca...",
"my_feed": "Les meves Publicacions",
"global_feed": "Publicacions Globals",
"global_feed_short": "Global",
"people_feed": "Seguint",
"people_feed_short": "Seguits",
"friend_requests": "Sol·licituds d'Amistat",
"updates": "Actualitzacions"
},
"notifications": {
"none": "No hi ha notificacions."
Expand All @@ -35,7 +42,10 @@
"tags": "Etiquetes",
"followers": "Seguidors",
"recent": "Publicacions recents",
"popular": "Publicacions populars"
"popular": "Publicacions populars",
"followers_count": "{{count}} seguidors",
"tags_not_applicable": "N/A",
"related": "Comunitats relacionades"
},
"user_settings": {
"show_game": "Mostra la experiència de joc al perfil",
Expand Down Expand Up @@ -103,9 +113,17 @@
"forgot_password": "¿Has oblidat la teva contrasenya?",
"no_account": "¿No tens cap compte?",
"login_action": "Iniciar sessió",
"no_account_setup": "La creació de comptes només estarà disponible quan hagis vinculat una Wii U o 3DS."
"no_account_setup": "La creació de comptes només estarà disponible quan hagis vinculat una Wii U o 3DS.",
"title": "Inicia la sessió per juxtaposició",
"heading": "Registre per juxtaposició",
"sub_title": "Introduïu les dades del vostre compte a continuació"
},
"error": {
"title": "Codi d'error: {{code}}"
"title": "Codi d'error: {{code}}",
"heading": "Error {{code}}: {{message}}",
"message": "Ups! Sembla que no hem trobat la pàgina que busques.<newline/>Comprova l'enllaç o torna-ho a provar més tard",
"no_access": "No estas autoritzat a accedir a aquesta aplicació ({{code}})",
"message_web": "Veure l'<status>estat actual del servidor</status>.<newline/>O bé, <home>torna a la pàgina d'inici</home>",
"error_details": "ID de sol·licitud: {{id}}"
}
}
12 changes: 7 additions & 5 deletions apps/juxtaposition-ui/src/assets/locales/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,12 @@
"language": "Čeština",
"notifications": {
"none": "Žádná oznámení.",
"new_follower/one": "<follower_one /> Vás začali sledovat!",
"new_follower/two": "<follower_one />, <follower_two /> Vás začali sledovat!",
"new_follower/three": "<follower_one />, <follower_two />, a {{count_other}} dalších Vás začali sledovat!",
"new_follower/multiple": "<follower_one />, <follower_two />, a {{count_other}} dalších Vás začali sledovat!"
"new_follower": {
"message/one": "<follower_one /> Vás začali sledovat!",
"message/two": "<follower_one />, <follower_two /> Vás začali sledovat!",
"message/three": "<follower_one />, <follower_two />, a {{count_other}} dalších Vás začali sledovat!",
"message/multiple": "<follower_one />, <follower_two />, a {{count_other}} dalších Vás začali sledovat!"
}
},
"new_post": {
"swearing": "Příspěvek nesmí obsahovat nevhodné výrazy.",
Expand Down Expand Up @@ -194,4 +196,4 @@
"silently_delete_post": "Potichu smazat",
"moderate_user": "Moderovat uživatele"
}
}
}
Loading