diff --git a/backend/src/components/report/mii-form.tsx b/backend/src/components/report/mii-form.tsx
index b244f64..e65dd06 100644
--- a/backend/src/components/report/mii-form.tsx
+++ b/backend/src/components/report/mii-form.tsx
@@ -1,8 +1,8 @@
import { useState } from "react";
-import { type Mii, ReportReason } from "@tomodachi-share/backend";
import ReasonSelector from "./reason-selector";
import SubmitButton from "../submit-button";
+import { Mii, ReportReason } from "@prisma/client";
interface Props {
mii: Mii;
diff --git a/frontend/package.json b/frontend/package.json
index 5263faf..f6135e6 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -22,7 +22,6 @@
"@nanostores/react": "^1.1.0",
"@swup/astro": "^1.8.0",
"@tailwindcss/vite": "^4.2.2",
- "@tomodachi-share/backend": "workspace:*",
"@tomodachi-share/shared": "workspace:*",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
diff --git a/frontend/src/components/mii/author-buttons.tsx b/frontend/src/components/mii/author-buttons.tsx
index 8c74efa..9ab3793 100644
--- a/frontend/src/components/mii/author-buttons.tsx
+++ b/frontend/src/components/mii/author-buttons.tsx
@@ -1,9 +1,8 @@
import { Icon } from "@iconify/react";
import DeleteMiiButton from "./delete-mii-button";
-import type { Mii } from "@tomodachi-share/backend";
interface Props {
- mii: Mii | any;
+ mii: any;
}
export default function AuthorButtons({ mii }: Props) {
diff --git a/frontend/src/components/mii/dating-preferences.tsx b/frontend/src/components/mii/dating-preferences.tsx
index b3cafb4..4f769f9 100644
--- a/frontend/src/components/mii/dating-preferences.tsx
+++ b/frontend/src/components/mii/dating-preferences.tsx
@@ -1,6 +1,5 @@
import { type ChangeEvent } from "react";
-import { MiiGender } from "@tomodachi-share/backend";
-import { type SwitchMiiInstructions } from "@tomodachi-share/shared";
+import { type MiiGender, type SwitchMiiInstructions } from "@tomodachi-share/shared";
interface Props {
data: SwitchMiiInstructions["datingPreferences"];
diff --git a/frontend/src/components/mii/list/filter-menu.tsx b/frontend/src/components/mii/list/filter-menu.tsx
index f37e69c..2d52520 100644
--- a/frontend/src/components/mii/list/filter-menu.tsx
+++ b/frontend/src/components/mii/list/filter-menu.tsx
@@ -1,13 +1,12 @@
import { useEffect, useMemo, useState } from "react";
import { Icon } from "@iconify/react";
-import type { MiiGender, MiiMakeup, MiiPlatform } from "@tomodachi-share/backend";
-
import PlatformSelect from "./platform-select";
import TagFilter from "./tag-filter";
import GenderSelect from "./gender-select";
import OtherFilters from "./other-filters";
import MakeupSelect from "./makeup-select";
+import type { MiiGender, MiiMakeup, MiiPlatform } from "@tomodachi-share/shared";
export default function FilterMenu() {
const searchParams = new URLSearchParams(window.location.search);
diff --git a/frontend/src/components/mii/list/gender-select.tsx b/frontend/src/components/mii/list/gender-select.tsx
index 2a9e091..aa12165 100644
--- a/frontend/src/components/mii/list/gender-select.tsx
+++ b/frontend/src/components/mii/list/gender-select.tsx
@@ -1,6 +1,6 @@
import { useState, useTransition } from "react";
import { Icon } from "@iconify/react";
-import type { MiiGender, MiiPlatform } from "@tomodachi-share/backend";
+import type { MiiGender, MiiPlatform } from "@tomodachi-share/shared";
export default function GenderSelect() {
const searchParams = new URLSearchParams(window.location.search);
diff --git a/frontend/src/components/mii/list/makeup-select.tsx b/frontend/src/components/mii/list/makeup-select.tsx
index 934cd78..839765d 100644
--- a/frontend/src/components/mii/list/makeup-select.tsx
+++ b/frontend/src/components/mii/list/makeup-select.tsx
@@ -1,6 +1,6 @@
import { useState, useTransition } from "react";
import { Icon } from "@iconify/react";
-import { type MiiMakeup } from "@tomodachi-share/backend";
+import type { MiiMakeup } from "@tomodachi-share/shared";
export default function MakeupSelect() {
const searchParams = new URLSearchParams(window.location.search);
diff --git a/frontend/src/components/mii/list/other-filters.tsx b/frontend/src/components/mii/list/other-filters.tsx
index a1f1d15..61fb96d 100644
--- a/frontend/src/components/mii/list/other-filters.tsx
+++ b/frontend/src/components/mii/list/other-filters.tsx
@@ -1,4 +1,4 @@
-import { type MiiPlatform } from "@tomodachi-share/backend";
+import type { MiiPlatform } from "@tomodachi-share/shared";
import { type ChangeEvent, useState, useTransition } from "react";
export default function OtherFilters() {
diff --git a/frontend/src/components/mii/list/platform-select.tsx b/frontend/src/components/mii/list/platform-select.tsx
index d67912a..6be08f0 100644
--- a/frontend/src/components/mii/list/platform-select.tsx
+++ b/frontend/src/components/mii/list/platform-select.tsx
@@ -1,6 +1,6 @@
import { useState, useTransition } from "react";
import { Icon } from "@iconify/react";
-import type { MiiPlatform } from "@tomodachi-share/backend";
+import type { MiiPlatform } from "@tomodachi-share/shared";
export default function PlatformSelect() {
const searchParams = new URLSearchParams(window.location.search);
diff --git a/frontend/src/components/pages/index.tsx b/frontend/src/components/pages/index.tsx
index abfd9fa..4cacd33 100644
--- a/frontend/src/components/pages/index.tsx
+++ b/frontend/src/components/pages/index.tsx
@@ -3,13 +3,12 @@ import FilterMenu from "../mii/list/filter-menu";
import SortSelect from "../mii/list/sort-select";
import MiiGrid from "../mii/list/mii-grid";
import Pagination from "../pagination";
-import { type Mii } from "@tomodachi-share/backend";
import Skeleton from "../mii/list/skeleton";
interface ApiResponse {
totalCount: number;
filteredCount: number;
- miis: Mii[];
+ miis: any[];
lastPage: number;
}
@@ -40,8 +39,10 @@ export default function IndexPage() {
{searchParams.get("tags") ? `Miis tagged with '${searchParams.get("tags")}' - TomodachiShare` : "TomodachiShare - index mii list"}
+
We're currently going through some major code changes therefore some features won't work.
+
}>
- {!loading && (
+ {!loading && data ? (
@@ -69,6 +70,8 @@ export default function IndexPage() {
+ ) : (
+
No Miis found :( Has the server died?
)}
>
diff --git a/frontend/src/components/pages/mii.tsx b/frontend/src/components/pages/mii.tsx
index 2c35d16..5bebc7f 100644
--- a/frontend/src/components/pages/mii.tsx
+++ b/frontend/src/components/pages/mii.tsx
@@ -8,7 +8,6 @@ import ShareMiiButton from "../mii/share-mii-button";
import ThreeDsScanTutorialButton from "../tutorial/3ds-scan";
import SwitchAddMiiTutorialButton from "../tutorial/switch-add-mii";
import MiiInstructions from "../mii/instructions";
-import type { Mii } from "@tomodachi-share/backend";
import { Icon } from "@iconify/react";
import { useEffect, useState } from "react";
@@ -17,7 +16,7 @@ interface Props {
}
export default function MiiPage({ id }: Props) {
- const [mii, setMii] = useState
(null);
+ const [mii, setMii] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
@@ -291,7 +290,7 @@ export default function MiiPage({ id }: Props) {
{/* Buttons */}
-
+ {/*
*/}
diff --git a/frontend/src/components/pages/profile.tsx b/frontend/src/components/pages/profile.tsx
index bdda1cc..fbb083f 100644
--- a/frontend/src/components/pages/profile.tsx
+++ b/frontend/src/components/pages/profile.tsx
@@ -1,4 +1,3 @@
-import type { User } from "@tomodachi-share/backend";
import { useEffect, useState } from "react";
import ProfileInformation from "../profile-information";
@@ -7,7 +6,7 @@ interface Props {
}
export default function ProfilePage({ id }: Props) {
- const [user, setUser] = useState(null);
+ const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
diff --git a/frontend/src/components/profile-information.tsx b/frontend/src/components/profile-information.tsx
index 6331501..8772869 100644
--- a/frontend/src/components/profile-information.tsx
+++ b/frontend/src/components/profile-information.tsx
@@ -1,19 +1,18 @@
import { Icon } from "@iconify/react";
import Description from "./description";
-import { type User } from "@tomodachi-share/backend";
import { useStore } from "@nanostores/react";
import { session } from "../session";
interface Props {
- user?: User | any;
+ user?: any;
page?: "settings" | "likes";
}
export default function ProfileInformation({ user, page }: Props) {
const $session = useStore(session);
- const isAdmin = (!user ? $session.user.id : user.id) === Number(import.meta.env.PUBLIC_ADMIN_USER_ID);
+ const isAdmin = (!user ? $session?.user.id : user.id) === Number(import.meta.env.PUBLIC_ADMIN_USER_ID);
const isContributor = import.meta.env.PUBLIC_CONTRIBUTORS_USER_IDS?.split(",").includes(user.id);
const isOwnProfile = !user || $session?.user?.id === user.id;
diff --git a/frontend/src/components/submit-form/index.tsx b/frontend/src/components/submit-form/index.tsx
index d0d4782..ba474cc 100644
--- a/frontend/src/components/submit-form/index.tsx
+++ b/frontend/src/components/submit-form/index.tsx
@@ -3,7 +3,6 @@ import { type FileWithPath } from "react-dropzone";
import { Icon } from "@iconify/react";
import qrcode from "qrcode-generator";
-import { MiiGender, MiiMakeup, MiiPlatform } from "@tomodachi-share/backend";
import { nameSchema, tagsSchema } from "@tomodachi-share/shared/schemas";
import { defaultInstructions, type SwitchMiiInstructions, ThreeDsTomodachiLifeMii, convertQrCode } from "@tomodachi-share/shared";
@@ -21,6 +20,7 @@ import LikeButton from "../like-button";
import Carousel from "../carousel";
import SubmitButton from "../submit-button";
import Dropzone from "../dropzone";
+import type { MiiPlatform, MiiGender, MiiMakeup } from "@tomodachi-share/shared";
export default function SubmitForm() {
const [files, setFiles] = useState([]);
diff --git a/frontend/src/components/submit-form/mii-editor/tabs/misc.tsx b/frontend/src/components/submit-form/mii-editor/tabs/misc.tsx
index 5b78331..caac609 100644
--- a/frontend/src/components/submit-form/mii-editor/tabs/misc.tsx
+++ b/frontend/src/components/submit-form/mii-editor/tabs/misc.tsx
@@ -1,6 +1,5 @@
import { useState } from "react";
-import { MiiGender } from "@tomodachi-share/backend";
-import type { SwitchMiiInstructions } from "@tomodachi-share/shared";
+import type { MiiGender, SwitchMiiInstructions } from "@tomodachi-share/shared";
import EnhancedSlider from "../enhanced-slider";
import DatingPreferencesViewer from "../../../mii/dating-preferences";
import VoiceViewer from "../../../mii/voice-viewer";
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8a89da7..ae3f3cf 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -170,9 +170,6 @@ importers:
'@tailwindcss/vite':
specifier: ^4.2.2
version: 4.2.2(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1))
- '@tomodachi-share/backend':
- specifier: workspace:*
- version: link:../backend
'@tomodachi-share/shared':
specifier: workspace:*
version: link:../shared
@@ -246,9 +243,6 @@ importers:
'@2toad/profanity':
specifier: ^3.3.0
version: 3.3.0
- '@tomodachi-share/backend':
- specifier: workspace:*
- version: link:../backend
bit-buffer:
specifier: ^0.3.0
version: 0.3.0
@@ -8548,8 +8542,8 @@ snapshots:
'@next/eslint-plugin-next': 16.2.3
eslint: 10.2.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.10
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1))
eslint-plugin-jsx-a11y: 6.10.2(eslint@10.2.0(jiti@2.6.1))
eslint-plugin-react: 7.37.5(eslint@10.2.0(jiti@2.6.1))
eslint-plugin-react-hooks: 7.0.1(eslint@10.2.0(jiti@2.6.1))
@@ -8571,7 +8565,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1)):
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.6.1)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.3
@@ -8582,22 +8576,22 @@ snapshots:
tinyglobby: 0.2.16
unrs-resolver: 1.11.1
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1)):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1)):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
eslint: 10.2.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.10
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1)):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -8608,7 +8602,7 @@ snapshots:
doctrine: 2.1.0
eslint: 10.2.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.10
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
diff --git a/shared/package.json b/shared/package.json
index 561be80..3b2376e 100644
--- a/shared/package.json
+++ b/shared/package.json
@@ -3,7 +3,6 @@
"version": "1.0.0",
"dependencies": {
"@2toad/profanity": "^3.3.0",
- "@tomodachi-share/backend": "workspace:*",
"bit-buffer": "^0.3.0",
"sjcl-with-all": "1.0.8",
"zod": "^4.3.6"
diff --git a/shared/src/index.ts b/shared/src/index.ts
index 788362f..87d2715 100644
--- a/shared/src/index.ts
+++ b/shared/src/index.ts
@@ -2,4 +2,4 @@ export * from "./constants";
export * from "./qr-codes";
export * from "./switch";
export * from "./three-ds-tomodachi-life-mii";
-export type { SwitchMiiInstructions } from "./types";
+export type { SwitchMiiInstructions, MiiGender, MiiMakeup, MiiPlatform } from "./types";
diff --git a/shared/src/schemas.ts b/shared/src/schemas.ts
index 44d687d..2f639fa 100644
--- a/shared/src/schemas.ts
+++ b/shared/src/schemas.ts
@@ -1,4 +1,3 @@
-import { MiiGender, MiiMakeup, MiiPlatform } from "@tomodachi-share/backend";
import { z } from "zod";
// profanity censoring bypasses the regex in some of these but I think it's funny
@@ -58,9 +57,9 @@ export const searchSchema = z.object({
.map((tag) => tag.trim())
.filter((tag) => tag.length > 0),
),
- platform: z.enum(MiiPlatform, { error: "Platform must be either 'THREE_DS', or 'SWITCH'" }).optional(),
- gender: z.enum(MiiGender, { error: "Gender must be either 'MALE', 'FEMALE', or 'NONBINARY' if on Switch platform" }).optional(),
- makeup: z.enum(MiiMakeup, { error: "Makeup must be either 'FULL', 'PARTIAL', or 'NONE'" }).optional(),
+ platform: z.enum(["THREE_DS", "SWITCH"], { error: "Platform must be either 'THREE_DS', or 'SWITCH'" }).optional(),
+ gender: z.enum(["MALE", "FEMALE", "NONBINARY"], { error: "Gender must be either 'MALE', 'FEMALE', or 'NONBINARY' if on Switch platform" }).optional(),
+ makeup: z.enum(["FULL", "PARTIAL", "NONE"], { error: "Makeup must be either 'FULL', 'PARTIAL', or 'NONE'" }).optional(),
allowCopying: z.coerce.boolean({ error: "Allow Copying must be either true or false" }).optional(),
quarantined: z.coerce.boolean({ error: "Quarantined must be either true or false" }).optional(),
// todo: incorporate tagsSchema
@@ -286,7 +285,7 @@ export const switchMiiInstructionsSchema = z
.optional(),
height: z.number().int().min(0).max(128).optional(),
weight: z.number().int().min(0).max(128).optional(),
- datingPreferences: z.array(z.enum(MiiGender)).optional(),
+ datingPreferences: z.array(z.enum(["MALE", "FEMALE", "NONBINARY"])).optional(),
birthday: z
.object({
day: z.number().int().min(1).max(31).optional(),
diff --git a/shared/src/types.d.ts b/shared/src/types.d.ts
index f314e8f..1b513b0 100644
--- a/shared/src/types.d.ts
+++ b/shared/src/types.d.ts
@@ -1,4 +1,6 @@
-import { MiiGender } from "@tomodachi-share/backend";
+type MiiGender = "MALE" | "FEMALE" | "NONBINARY";
+type MiiPlatform = "THREE_DS" | "SWITCH";
+type MiiMakeup = "FULL" | "PARTIAL" | "NONE";
export interface SwitchMiiInstructions {
head: {