Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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: 1 addition & 1 deletion .cta.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@
"store",
"tanstack-query"
]
}
}
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Bug Report
description: Report a bug or unexpected behavior
title: "[Bug]: "
labels: ["bug"]
title: '[Bug]: '
labels: ['bug']

body:
- type: markdown
Expand Down
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Feature Request
description: Suggest a new feature or enhancement
title: "[Feature]: "
labels: ["enhancement"]
title: '[Feature]: '
labels: ['enhancement']

body:
- type: markdown
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
cache: 'npm'

- name: Install dependencies
run: npm ci
run: npm install

- name: Run linter
run: npm run lint
Expand Down
2 changes: 2 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
npm run validate
npm test
23 changes: 6 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Welcome to your new TanStack Start app!
Welcome to your new TanStack Start app!

# Getting Started

Expand Down Expand Up @@ -40,7 +40,6 @@ If you prefer not to use Tailwind CSS:

## Linting & Formatting


This project uses [eslint](https://eslint.org/) and [prettier](https://prettier.io/) for linting and formatting. Eslint is configured using [tanstack/eslint-config](https://tanstack.com/config/latest/docs/eslint). The following scripts are available:

```bash
Expand All @@ -49,18 +48,15 @@ npm run format
npm run check
```


## Setting up Clerk

- Set the `VITE_CLERK_PUBLISHABLE_KEY` in your `.env.local`.


## Setting up Convex

- Set the `VITE_CONVEX_URL` and `CONVEX_DEPLOYMENT` environment variables in your `.env.local`. (Or run `npx -y convex init` to set them automatically.)
- Run `npx -y convex dev` to start the Convex server.


# Paraglide i18n

This add-on wires up ParaglideJS for localized routing and message formatting.
Expand All @@ -69,7 +65,6 @@ This add-on wires up ParaglideJS for localized routing and message formatting.
- URLs are localized through the Paraglide Vite plugin and router `rewrite` hooks.
- Run the dev server or build to regenerate the `src/paraglide` outputs.


## Shadcn

Add components using the latest version of [Shadcn](https://ui.shadcn.com/).
Expand All @@ -78,7 +73,6 @@ Add components using the latest version of [Shadcn](https://ui.shadcn.com/).
pnpm dlx shadcn@latest add button
```


## T3Env

- You can use T3Env to add type safety to your environment variables.
Expand All @@ -88,16 +82,11 @@ pnpm dlx shadcn@latest add button
### Usage

```ts
import { env } from "@/env";
import { env } from '@/env'

console.log(env.VITE_APP_TITLE);
console.log(env.VITE_APP_TITLE)
```






## Routing

This project uses [TanStack Router](https://tanstack.com/router) with file-based routing. Routes are managed as files in `src/routes`.
Expand All @@ -115,7 +104,7 @@ Now that you have two routes you can use a `Link` component to navigate between
To use SPA (Single Page Application) navigation you will need to import the `Link` component from `@tanstack/react-router`.

```tsx
import { Link } from "@tanstack/react-router";
import { Link } from '@tanstack/react-router'
```

Then anywhere in your JSX you can use it like so:
Expand Down Expand Up @@ -183,11 +172,11 @@ const getServerTime = createServerFn({
// Use in a component
function MyComponent() {
const [time, setTime] = useState('')

useEffect(() => {
getServerTime().then(setTime)
}, [])

return <div>Server time: {time}</div>
}
```
Expand Down
2 changes: 1 addition & 1 deletion components.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@
"hooks": "@/hooks"
},
"iconLibrary": "lucide"
}
}
6 changes: 3 additions & 3 deletions convex/_generated/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
* @module
*/

import { anyApi } from "convex/server";
import { anyApi } from 'convex/server'

/**
* A utility for referencing Convex functions in your app's API.
Expand All @@ -18,5 +18,5 @@ import { anyApi } from "convex/server";
* const myFunctionReference = api.myModule.myFunction;
* ```
*/
export const api = anyApi;
export const internal = anyApi;
export const api = anyApi
export const internal = anyApi
16 changes: 8 additions & 8 deletions convex/_generated/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {
internalActionGeneric,
internalMutationGeneric,
internalQueryGeneric,
} from "convex/server";
} from 'convex/server'

/**
* Define a query in this Convex app's public API.
Expand All @@ -26,7 +26,7 @@ import {
* @param func - The query function. It receives a {@link QueryCtx} as its first argument.
* @returns The wrapped query. Include this as an `export` to name it and make it accessible.
*/
export const query = queryGeneric;
export const query = queryGeneric

/**
* Define a query that is only accessible from other Convex functions (but not from the client).
Expand All @@ -36,7 +36,7 @@ export const query = queryGeneric;
* @param func - The query function. It receives a {@link QueryCtx} as its first argument.
* @returns The wrapped query. Include this as an `export` to name it and make it accessible.
*/
export const internalQuery = internalQueryGeneric;
export const internalQuery = internalQueryGeneric

/**
* Define a mutation in this Convex app's public API.
Expand All @@ -46,7 +46,7 @@ export const internalQuery = internalQueryGeneric;
* @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.
* @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.
*/
export const mutation = mutationGeneric;
export const mutation = mutationGeneric

/**
* Define a mutation that is only accessible from other Convex functions (but not from the client).
Expand All @@ -56,7 +56,7 @@ export const mutation = mutationGeneric;
* @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.
* @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.
*/
export const internalMutation = internalMutationGeneric;
export const internalMutation = internalMutationGeneric

/**
* Define an action in this Convex app's public API.
Expand All @@ -69,15 +69,15 @@ export const internalMutation = internalMutationGeneric;
* @param func - The action. It receives an {@link ActionCtx} as its first argument.
* @returns The wrapped action. Include this as an `export` to name it and make it accessible.
*/
export const action = actionGeneric;
export const action = actionGeneric

/**
* Define an action that is only accessible from other Convex functions (but not from the client).
*
* @param func - The function. It receives an {@link ActionCtx} as its first argument.
* @returns The wrapped function. Include this as an `export` to name it and make it accessible.
*/
export const internalAction = internalActionGeneric;
export const internalAction = internalActionGeneric

/**
* Define a Convex HTTP action.
Expand All @@ -86,4 +86,4 @@ export const internalAction = internalActionGeneric;
* as its second.
* @returns The wrapped endpoint function. Route a URL path to this function in `convex/http.js`.
*/
export const httpAction = httpActionGeneric;
export const httpAction = httpActionGeneric
1 change: 1 addition & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export default [
'.vite/**',
'src/routes/__root.tsx',
'src/routes/demo/**',
'.output/**',
],
},
]
9 changes: 0 additions & 9 deletions messages/de.json

This file was deleted.

51 changes: 45 additions & 6 deletions messages/en.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,48 @@
{
"$schema": "https://inlang.com/schema/inlang-message-format",
"home_page": "Home page",
"about_page": "About page",
"example_message": "Welcome to your i18n app.",
"language_label": "Language",
"current_locale": "Current locale: {locale}",
"learn_router": "Learn Paraglide JS"
"navigation": {
"logout": "Logout"
},
"sign_in": {
"title": "Login to your account",
"description": "Enter your email below to sign in to your account",
"mfa": {
"description": "Enter your authentication code",
"code": "Authentication Code",
"verify": "Verify"
},
"email": "Email",
"email_placeholder": "hello@example.com",
"password": "Password",
"remember_me": "Remember me",
"forgot_password": "Forgot password",
"button": "Sign in",
"sign_up": "Create an account",
"no_account": "Don't have an account?"
},
"sign_up": {
"title": "Create an account",
"description": "Create a new account",
"email": "Email",
"email_placeholder": "hello@example.com",
"email_description": "Enter your email to create and verify your account.",
"password": "Password",
"button": "Create account",
"confirm": {
"label": "Confirm password",
"placeholder": "Confirm your password",
"description": "Please confirm your password."
},
"already_have_account": "Already have an account?",
"sign_in": "Sign in",
"rules": {
"length": "Must be at least {num} characters long.",
"special": "Must contain at least one special character and one number."
},
"verify": {
"label": "Verify your email",
"description": "We've sent a verification code to {email}. Please enter it below to complete your account setup.",
"button": "Verify"
}
}
}
47 changes: 47 additions & 0 deletions messages/fr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{
"$schema": "https://inlang.com/schema/inlang-message-format",
"navigation": {
"logout": "Se déconnecter"
},
"sign_in": {
"title": "Se connecter",
"description": "Entrez votre courriel ci-dessous pour vous connecter à votre compte",
"mfa": {
"description": "Entrez votre code d'authentification",
"code": "Code d'authentification",
"verify": "Vérifier"
},
"email": "Courriel",
"email_placeholder": "bonjour@exemple.com",
"password": "Mot de passe",
"remember_me": "Se souvenir de moi",
"forgot_password": "Mot de passe oublié",
"button": "Se connecter",
"sign_up": "Créer un compte",
"no_account": "Vous n'avez pas de compte ?"
},
"sign_up": {
"title": "Créer un compte",
"description": "Entrez votre courriel ci-dessous pour créer un compte",
"email": "Courriel",
"email_placeholder": "bonjour@exemple.com",
"email_description": "Nous utiliserons ce courriel pour vous contacter et pour vérifier votre compte.",
"password": "Mot de passe",
"button": "Créer un compte",
"confirm": {
"label": "Confirmer le mot de passe",
"placeholder": "Confirmer votre mot de passe",
"description": "Veuillez confirmer votre mot de passe."
},
"already_have_account": "Vous avez déjà un compte ?",
"rules": {
"length": "Doit contenir au moins {num} caractères.",
"special": "Doit contenir au moins un caractère spécial et un nombre."
},
"verify": {
"label": "Vérifier votre courriel",
"description": "Nous avons envoyé un code de vérification à {email}. Veuillez entrer ci-dessous pour compléter la configuration de votre compte.",
"button": "Vérifier"
}
}
}
Loading