No description
Find a file
Vadym Samoilenko 2ab22e5efb Fix cookie banner disappearing when TinaCloud data loads
Refactored LanguageProvider to avoid remounting children when switching
from static to live translations. Previously, the switch from
LanguageContext.Provider to TinaConnectedProvider caused all children
to unmount/remount, resetting CookieConsent state and hiding the banner
if cookie_consent was already set in localStorage.

New approach: TinaLiveSync is a null-rendering component that calls useTina
and syncs live data back to LanguageProvider via a stable callback, while
LanguageContext.Provider remains the stable root wrapper — children never remount.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 22:36:18 +00:00
.github/workflows Preserve server blog content: exclude blog/ from rsync --delete 2026-03-12 22:14:39 +00:00
assets Initial commit: Aimpress website 2026-03-08 13:47:37 +00:00
chatbot-api Add multi-language support (EN/UK) across entire site 2026-03-09 13:32:04 +00:00
content Migrate 5 server blog posts to TinaCMS-managed content/blog/ 2026-03-12 22:28:11 +00:00
email-api Add markdown rendering in chat widget + opportunities for new leads 2026-03-08 21:30:49 +00:00
public Add public/uploads directory for TinaCloud media storage 2026-03-12 22:02:41 +00:00
scripts Migrate 5 server blog posts to TinaCMS-managed content/blog/ 2026-03-12 22:28:11 +00:00
server Add Twenty CRM integration + lead enrichment + pulsating chat bubble 2026-03-08 18:13:26 +00:00
specs/001-multi-language Add multi-language support (EN/UK) across entire site 2026-03-09 13:32:04 +00:00
src Fix cookie banner disappearing when TinaCloud data loads 2026-03-12 22:36:18 +00:00
tina Re-enable visual editor preview for Site Content collections 2026-03-12 22:31:12 +00:00
.dockerignore Initial commit: Aimpress website 2026-03-08 13:47:37 +00:00
.gitignore Add visual editing via useTina + configure tina collections for SPA 2026-03-12 21:42:05 +00:00
CLAUDE.md Add multi-language support (EN/UK) across entire site 2026-03-09 13:32:04 +00:00
docker-compose.yml Initial commit: Aimpress website 2026-03-08 13:47:37 +00:00
Dockerfile Initial commit: Aimpress website 2026-03-08 13:47:37 +00:00
eslint.config.js Initial commit: Aimpress website 2026-03-08 13:47:37 +00:00
index.html Add SEO, structured data, AI indexing, and Google Reviews integration 2026-03-08 14:26:05 +00:00
package-lock.json Add TinaCMS Cloud integration (Phase 1) 2026-03-12 20:34:35 +00:00
package.json Add TinaCMS Cloud integration (Phase 1) 2026-03-12 20:34:35 +00:00
README.md Initial commit: Aimpress website 2026-03-08 13:47:37 +00:00
tsconfig.app.json Add TinaCMS Cloud integration (Phase 1) 2026-03-12 20:34:35 +00:00
tsconfig.json Initial commit: Aimpress website 2026-03-08 13:47:37 +00:00
tsconfig.node.json Initial commit: Aimpress website 2026-03-08 13:47:37 +00:00
vite.config.ts Initial commit: Aimpress website 2026-03-08 13:47:37 +00:00

React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

React Compiler

The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.

Expanding the ESLint configuration

If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:

export default defineConfig([
  globalIgnores(['dist']),
  {
    files: ['**/*.{ts,tsx}'],
    extends: [
      // Other configs...

      // Remove tseslint.configs.recommended and replace with this
      tseslint.configs.recommendedTypeChecked,
      // Alternatively, use this for stricter rules
      tseslint.configs.strictTypeChecked,
      // Optionally, add this for stylistic rules
      tseslint.configs.stylisticTypeChecked,

      // Other configs...
    ],
    languageOptions: {
      parserOptions: {
        project: ['./tsconfig.node.json', './tsconfig.app.json'],
        tsconfigRootDir: import.meta.dirname,
      },
      // other options...
    },
  },
])

You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:

// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'

export default defineConfig([
  globalIgnores(['dist']),
  {
    files: ['**/*.{ts,tsx}'],
    extends: [
      // Other configs...
      // Enable lint rules for React
      reactX.configs['recommended-typescript'],
      // Enable lint rules for React DOM
      reactDom.configs.recommended,
    ],
    languageOptions: {
      parserOptions: {
        project: ['./tsconfig.node.json', './tsconfig.app.json'],
        tsconfigRootDir: import.meta.dirname,
      },
      // other options...
    },
  },
])