diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index 4f6f59e..05f2e98 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -8,8 +8,8 @@
module.exports = {
root: true,
parserOptions: {
- ecmaVersion: "latest",
- sourceType: "module",
+ ecmaVersion: 'latest',
+ sourceType: 'module',
ecmaFeatures: {
jsx: true,
},
@@ -19,32 +19,32 @@ module.exports = {
commonjs: true,
es6: true,
},
- ignorePatterns: ["!**/.server", "!**/.client"],
+ ignorePatterns: ['!**/.server', '!**/.client'],
// Base config
- extends: ["eslint:recommended"],
+ extends: ['eslint:recommended'],
overrides: [
// React
{
- files: ["**/*.{js,jsx,ts,tsx}"],
- plugins: ["react", "jsx-a11y"],
+ files: ['**/*.{js,jsx,ts,tsx}'],
+ plugins: ['react', 'jsx-a11y'],
extends: [
- "plugin:react/recommended",
- "plugin:react/jsx-runtime",
- "plugin:react-hooks/recommended",
- "plugin:jsx-a11y/recommended",
+ 'plugin:react/recommended',
+ 'plugin:react/jsx-runtime',
+ 'plugin:react-hooks/recommended',
+ 'plugin:jsx-a11y/recommended',
],
settings: {
react: {
- version: "detect",
+ version: 'detect',
},
- formComponents: ["Form"],
+ formComponents: ['Form'],
linkComponents: [
- { name: "Link", linkAttribute: "to" },
- { name: "NavLink", linkAttribute: "to" },
+ { name: 'Link', linkAttribute: 'to' },
+ { name: 'NavLink', linkAttribute: 'to' },
],
- "import/resolver": {
+ 'import/resolver': {
typescript: {},
},
},
@@ -52,14 +52,14 @@ module.exports = {
// Typescript
{
- files: ["**/*.{ts,tsx}"],
- plugins: ["@typescript-eslint", "import"],
- parser: "@typescript-eslint/parser",
+ files: ['**/*.{ts,tsx}'],
+ plugins: ['@typescript-eslint', 'import'],
+ parser: '@typescript-eslint/parser',
settings: {
- "import/internal-regex": "^~/",
- "import/resolver": {
+ 'import/internal-regex': '^~/',
+ 'import/resolver': {
node: {
- extensions: [".ts", ".tsx"],
+ extensions: ['.ts', '.tsx'],
},
typescript: {
alwaysTryTypes: true,
@@ -67,15 +67,15 @@ module.exports = {
},
},
extends: [
- "plugin:@typescript-eslint/recommended",
- "plugin:import/recommended",
- "plugin:import/typescript",
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:import/recommended',
+ 'plugin:import/typescript',
],
},
// Node
{
- files: [".eslintrc.cjs"],
+ files: ['.eslintrc.cjs'],
env: {
node: true,
},
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..8e4c7a2
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,15 @@
+name: CI
+on:
+ push:
+jobs:
+ CI:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ - name: Setup Bun
+ uses: oven-sh/setup-bun@v1
+ - name: Install dependencies
+ run: bun install
+ - name: Run Check
+ run: bun run check
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..aaa1262
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,21 @@
+{
+ "[javascript]": {
+ "editor.defaultFormatter": "biomejs.biome"
+ },
+ "[javascriptreact]": {
+ "editor.defaultFormatter": "biomejs.biome"
+ },
+ "[typescript]": {
+ "editor.defaultFormatter": "biomejs.biome"
+ },
+ "[typescriptreact]": {
+ "editor.defaultFormatter": "biomejs.biome"
+ },
+ "editor.codeActionsOnSave": {
+ "quickfix.biome": "always",
+ "source.organizeImports.biome": "always"
+ },
+ "editor.defaultFormatter": "biomejs.biome",
+ "editor.formatOnSave": true,
+ "files.autoSave": "onFocusChange"
+}
diff --git a/app/entry.client.tsx b/app/entry.client.tsx
index 94d5dc0..0f088c2 100644
--- a/app/entry.client.tsx
+++ b/app/entry.client.tsx
@@ -4,15 +4,15 @@
* For more information, see https://remix.run/file-conventions/entry.client
*/
-import { RemixBrowser } from "@remix-run/react";
-import { startTransition, StrictMode } from "react";
-import { hydrateRoot } from "react-dom/client";
+import { RemixBrowser } from '@remix-run/react';
+import { StrictMode, startTransition } from 'react';
+import { hydrateRoot } from 'react-dom/client';
startTransition(() => {
hydrateRoot(
document,
Hi, {data.user.name}-