Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
105 commits
Select commit Hold shift + click to select a range
230163d
chore: migrate frontend checks to TypeScript 7
Priveetee Aug 22, 2026
35298f0
fix: require explicit playback selection
Priveetee Aug 22, 2026
ee24192
feat: add portability API client
Priveetee Aug 22, 2026
56d1f44
feat: add portability category controls
Priveetee Aug 22, 2026
0cc10e5
feat: add account import workflow
Priveetee Aug 22, 2026
a0dd1da
feat: add account export workflow
Priveetee Aug 22, 2026
3471f14
feat: expose the data portability workspace
Priveetee Aug 22, 2026
79bb8a3
fix: keep portability internals private
Priveetee Aug 22, 2026
5eb7296
fix: update player position recovery
Priveetee Aug 22, 2026
1baf5cd
feat: add portability project icons
Priveetee Aug 22, 2026
31b74f4
feat: improve portability job support
Priveetee Aug 22, 2026
d9e7964
feat: add portability format picker
Priveetee Aug 22, 2026
ce8e45d
feat: guide portability imports
Priveetee Aug 22, 2026
502a3f2
feat: show download transfer progress
Priveetee Aug 22, 2026
8bf8299
feat: add TypeType community links
Priveetee Aug 22, 2026
82e3131
feat: clarify portability format support
Priveetee Aug 22, 2026
af713e0
feat: add dedicated export route
Priveetee Aug 22, 2026
8954f43
fix: stabilize sabr media transitions
Priveetee Aug 23, 2026
6a8c3e5
chore: update mse to 0.1.52
Priveetee Aug 23, 2026
97511bd
fix: prefer original sabr audio track
Priveetee Aug 24, 2026
afed132
feat: add community-ready interface localization
Priveetee Aug 24, 2026
85c4a36
refactor: organize settings into responsive sections
Priveetee Aug 24, 2026
486e675
feat: add seamless English and French switcher
Priveetee Aug 24, 2026
87e62f9
refactor: redesign instance administration controls
Priveetee Aug 24, 2026
e2ee191
refactor: unify the admin console navigation
Priveetee Aug 24, 2026
6727a70
feat: gate channel controls by instance policy
Priveetee Aug 24, 2026
f93aa69
fix: keep watch recommendations available
Priveetee Aug 24, 2026
ad8190d
feat: improve admin bug report diagnostics
Priveetee Aug 24, 2026
9e17607
fix: preserve user-started Safari playback
Priveetee Aug 24, 2026
07c3f1b
style: format localization settings
Priveetee Aug 24, 2026
1334a8f
style: refine user settings interface
Priveetee Aug 24, 2026
85b5881
fix: align switches and load comments on scroll
Priveetee Aug 24, 2026
e93129f
feat: add custom not found page
Priveetee Aug 24, 2026
c8eaa12
fix: size infinite scroll sentinel
Priveetee Aug 24, 2026
98c7411
feat: refine interface language transitions
Priveetee Aug 24, 2026
9a60389
feat: redesign responsive profile settings
Priveetee Aug 24, 2026
625342a
style: simplify settings surfaces
Priveetee Aug 24, 2026
078a19a
style: refine admin user management
Priveetee Aug 24, 2026
2f2a5aa
style: align admin users with management table
Priveetee Aug 24, 2026
ed1646f
fix: keep admin drawer inside viewport
Priveetee Aug 24, 2026
b0db619
feat: add portability translations
Priveetee Aug 25, 2026
2fa6a74
fix: localize portability and clear stale jobs
Priveetee Aug 25, 2026
ce7c224
perf: avoid blocking cached playback progress
Priveetee Aug 25, 2026
2a0d8d7
fix: make frontend checks reproducible
Priveetee Aug 25, 2026
01a0866
fix: make portability locale deterministic
Priveetee Aug 25, 2026
26f252d
refactor: split portability import preview
Priveetee Aug 25, 2026
0ce07d1
fix: refresh portability locale
Priveetee Aug 25, 2026
6e89d25
fix: localize application navigation
Priveetee Aug 25, 2026
b4b571a
fix: coordinate browser session refreshes
Priveetee Aug 25, 2026
27a3f7c
feat: add admin user translations
Priveetee Aug 25, 2026
1981c88
fix: localize admin user management
Priveetee Aug 25, 2026
3eb3fef
perf: update history progress without refetching
Priveetee Aug 25, 2026
75ed9ce
fix: constrain player audio menu
Priveetee Aug 25, 2026
ca654bc
fix: localize sign in flow
Priveetee Aug 25, 2026
18a34d2
feat: add watch page translations
Priveetee Aug 25, 2026
8f104a8
fix: localize watch page controls
Priveetee Aug 25, 2026
9cf67a9
fix: localize player menus
Priveetee Aug 25, 2026
0be7938
fix: localize custom player controls
Priveetee Aug 25, 2026
667d7a7
perf: reduce SABR startup buffering
Priveetee Aug 25, 2026
135f617
feat: add particle locale transitions
Priveetee Aug 25, 2026
11c549b
fix: rasterize locale particle text
Priveetee Aug 25, 2026
4df76f9
feat: add locale transition preview
Priveetee Aug 25, 2026
c5b077e
fix: pass locale preview quality checks
Priveetee Aug 25, 2026
1309734
feat: replace locale particles with decryption
Priveetee Aug 25, 2026
8012c38
test: cover locale text decryption
Priveetee Aug 25, 2026
2480e8a
fix: isolate the not found page
Priveetee Aug 25, 2026
a17168f
chore: remove locale transition preview
Priveetee Aug 25, 2026
0083e88
fix: keep resumed playback inside shared media
Priveetee Aug 25, 2026
a44b0e4
fix: restore saved watch positions in seconds
Priveetee Aug 25, 2026
aeb494f
fix: restore watch progress before SABR startup
Priveetee Aug 25, 2026
171bb78
style: unify locale transitions and pinned comments
Priveetee Aug 25, 2026
f2f3117
style: speed up locale transitions
Priveetee Aug 25, 2026
1416a71
chore: update mse player to 0.1.55
Priveetee Aug 25, 2026
cc9082c
chore: update mse player to 0.1.56
Priveetee Aug 25, 2026
b5d1584
feat: add subscription groups preview
Priveetee Aug 26, 2026
b83c900
fix: derive nginx resolver from runtime network
Priveetee Aug 26, 2026
ecc7bc6
fix: tune interface locale transition
Priveetee Aug 27, 2026
2f30f59
chore(l10n): update French translation
weblate Aug 26, 2026
ca70d16
chore(l10n): update French translation
Aug 26, 2026
15c897c
chore(l10n): update French translation
Aug 26, 2026
57afbf6
docs: add localization workflow and progress report
Priveetee Aug 27, 2026
ccbb887
test: block untranslated frontend literals
Priveetee Aug 27, 2026
8fff58e
feat: add player translation messages
Priveetee Aug 27, 2026
8b132a2
feat: add profile translation messages
Priveetee Aug 27, 2026
d0ff1e3
refactor: remove obsolete portability messages
Priveetee Aug 27, 2026
5b9cf03
refactor: remove legacy portability messages
Priveetee Aug 27, 2026
77b6d3c
feat: add core translation messages
Priveetee Aug 27, 2026
a35d8c0
feat: add translation catalog batch 2
Priveetee Aug 27, 2026
437529d
feat: add translation catalog batch 3
Priveetee Aug 27, 2026
0596ed5
feat: add translation catalog batch 4
Priveetee Aug 27, 2026
e805be2
feat: add translation catalog batch 5
Priveetee Aug 27, 2026
9b8737e
feat: add translation catalog batch 6
Priveetee Aug 27, 2026
bcfce7c
feat: add translation catalog batch 7
Priveetee Aug 27, 2026
f5bbc87
feat: add translation catalog batch 8
Priveetee Aug 27, 2026
aba93dc
refactor: localize frontend copy batch 1
Priveetee Aug 27, 2026
08a6eae
refactor: localize frontend copy batch 2
Priveetee Aug 27, 2026
528bbb3
refactor: localize frontend copy batch 3
Priveetee Aug 27, 2026
d87b6cd
refactor: localize frontend copy batch 4
Priveetee Aug 27, 2026
64fc349
refactor: localize frontend copy batch 5
Priveetee Aug 27, 2026
3c291da
refactor: localize frontend copy batch 6
Priveetee Aug 27, 2026
113fa29
refactor: localize frontend copy batch 7
Priveetee Aug 27, 2026
5221212
refactor: localize frontend copy batch 8
Priveetee Aug 27, 2026
adbb4d3
chore: reconcile Weblate translation branch
Priveetee Aug 27, 2026
1f2133d
test: preload browser storage for locale tests
Priveetee Aug 27, 2026
7ed43fc
chore: prepare frontend 1.7.0
Priveetee Aug 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
29 changes: 29 additions & 0 deletions .github/workflows/localization.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Localization

on:
push:
branches: ["dev"]
pull_request:
branches: ["dev", "main"]
workflow_dispatch:

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

jobs:
report:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7.0.1

- uses: oven-sh/setup-bun@v2.2.0
with:
bun-version: "1.3.14"

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Check catalogs and report status
run: |
bun run check
bun run localization:report -- --markdown | tee -a "$GITHUB_STEP_SUMMARY"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ coverage/
tmp/
.DS_Store
*.tsbuildinfo
apps/web/src/paraglide/
.env
5 changes: 4 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,13 @@ ARG BUILD_VERSION=0.1.0
ARG BUILD_REVISION=development
ARG BUILD_TIME=unknown

# Let the official entrypoint derive the resolver from the runtime network.
ENV NGINX_ENTRYPOINT_LOCAL_RESOLVERS=1

RUN apk upgrade --no-cache libxml2 libcrypto3 libssl3 libexpat

COPY --from=builder /app/apps/web/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/templates/default.conf.template
RUN short_revision="$(printf '%s' "$BUILD_REVISION" | cut -c1-12)" \
&& printf '{"service":"typetype","version":"%s","revision":"%s","shortRevision":"%s","buildTime":"%s"}\n' \
"$BUILD_VERSION" "$BUILD_REVISION" "$short_revision" "$BUILD_TIME" \
Expand Down
37 changes: 37 additions & 0 deletions LOCALIZATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Localization

TypeType stores interface translations in `apps/web/messages`.
English is the source catalog. The Weblate component is scoped to
`apps/web/messages/*.json`; it must never import or edit the generated files in
`apps/web/src/paraglide`.

## For Contributors

Use [Weblate](https://translate.typetype.video/engage/typetype/) to translate
without writing code. Select a language, translate the available messages, and
submit the proposed changes there. Weblate sends the resulting catalog changes
back as a pull request targeting `dev`, where the normal checks validate keys,
placeholders, and the frontend build.

The [translation status badge](https://translate.typetype.video/engage/typetype/)
in the README is supplied by Weblate. For a local, reproducible snapshot, run:

```sh
bun run localization:report -- --markdown
```

The report distinguishes complete key coverage from values that differ from
English. The latter is only an indicator because product names and technical
labels can intentionally remain identical.

To add a language:

1. Add its BCP 47 code to `locales` in `apps/web/project.inlang/settings.json`.
2. Add a matching JSON catalog in `apps/web/messages`.
3. Translate existing values without changing their keys or parameters.
4. Add the language to the interface selector.
5. Run `bun run build`, `bun test`, and `bun run check` from the repository root.

Missing messages fall back to English. Keep product names, protocol names, and
provider names unchanged unless their official localization differs. Never edit
`apps/web/src/paraglide` by hand; regenerate it with `bun run localize`.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
<p>The React web client for TypeType.</p>
</div>

[![Translation status](https://translate.typetype.video/widgets/typetype/-/svg-badge.svg)](https://translate.typetype.video/engage/typetype/)

This repository contains the browser application and its nginx container. It owns the user interface, routing, settings, account flows, library views, and integration with the TypeType API and playback package.

If you want to install or update a complete TypeType instance, use the [central TypeType repository](https://github.com/TypeType-Video/TypeType) and the [self-hosting documentation](https://typetype-video.github.io/Docs-TypeType/self-hosting/introduction).
Expand Down Expand Up @@ -73,6 +75,12 @@ bun run sherif
bun run build
```

Translation contributors can use [Weblate](https://translate.typetype.video/engage/typetype/)
without editing code. The current catalog status can also be inspected locally
with `bun run localization:report -- --markdown`. See
[LOCALIZATION.md](LOCALIZATION.md) for the source catalog, Weblate sync rules,
and the contributor workflow.

Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request. Bug reports and feature requests belong in the [central issue tracker](https://github.com/TypeType-Video/TypeType/issues).

## License
Expand Down
17 changes: 17 additions & 0 deletions THIRD_PARTY_ASSETS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Third-party assets

The data portability interface uses the following unmodified project icons for
identification. Each asset remains covered by its source project's license and
trademark rules; the repository's MIT license does not relicense these files.

| Asset | Source file | Source revision | License |
|---|---|---|---|
| `flow.png` | [Flow icon](https://github.com/A-EDev/Flow/blob/c98a425bd55eca5a8d0edc74981d30c52379fb1b/fastlane/metadata/android/en-US/images/icon.png) | `c98a425bd55eca5a8d0edc74981d30c52379fb1b` | GPL-3.0 |
| `grayjay.png` | [Grayjay launcher icon](https://github.com/futo-org/grayjay-android/blob/3d62258fb2b28f65c3fe7d03357af7c63deb712f/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png) | `3d62258fb2b28f65c3fe7d03357af7c63deb712f` | Source First License 1.1 |
| `materialious.png` | [Materialious launcher icon](https://github.com/Materialious/Materialious/blob/32121b880a7287f70de9ee71634fc11beba52ce4/materialious/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png) | `32121b880a7287f70de9ee71634fc11beba52ce4` | AGPL-3.0 |
| `skytube.png` | [SkyTube launcher icon](https://github.com/SkyTubeTeam/SkyTube/blob/46d9d393f584a5698689dd4e0145058c6ca8801c/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png) | `46d9d393f584a5698689dd4e0145058c6ca8801c` | GPL-3.0 |
| `viewtube.png` | [ViewTube icon](https://github.com/ViewTube/viewtube/blob/2b0183cba46e7a525e363c47bb6df7a62faf5dd1/client/app/assets/icon-192.png) | `2b0183cba46e7a525e363c47bb6df7a62faf5dd1` | AGPL-3.0 |
| `youtube-local.ico` | [youtube-local icon](https://github.com/user234683/youtube-local/blob/1adaf33f4572bbca423ab61d21b5654c8f3b56b9/youtube/static/favicon.ico) | `1adaf33f4572bbca423ab61d21b5654c8f3b56b9` | AGPL-3.0 |

The remaining brand marks come from the `simple-icons` package or the TypeType
and PipePipe project assets already present in the web application.
Loading