Fortura Data Solutions

A high-performance, cost-effective, and privacy-first alternative to cloud hosting for enterprises.

GitHub Repo stars Twitter Follow License
![hero](https://fortura-data.com/og-image.png) ## About Fortura Data Solutions Fortura Data Solutions provides a modern, enterprise-grade infrastructure stack that allows organizations to **own their hardware, slash their cloud bills, and maintain full control over their data**. We built our platform for high-demand environments like VFX studios, where petabytes of data move in real-time on tight budgets. Now, we're bringing that same performance and cost-efficiency to every business serious about their bottom line and data sovereignty. ### Why Fortura? * **Cost Reduction:** Stop paying rent. Own the hardware and see your operational costs drop significantly, often achieving break-even within 12 months. * **Performance:** Get cloud-level performance with sub-10ms latencies on colocated hardware, tailored to your workloads. * **Data Ownership & Privacy:** Your data stays on your hardware, governed by your rules. AI-native workflows keep your data private, with zero leakage to third parties. * **Integrated Stack:** We help you build on the tools you already use, wiring them together and automating the boring parts. * **Minimal Retraining:** Our "desire paths" approach means we embed with your team, shape the system to how you *actually* work, then automate. ## Getting Started This repository contains the code for the Fortura Data Solutions marketing website. It's built with Next.js, TypeScript, and Tailwind CSS. ### Prerequisites - Node.js >= 20 - pnpm >= 8 - Docker (optional, for containerized deployment) ### Environment Variables To run this project, you'll need to set up the following environment variables: ```bash # Create a .env.local file in the root directory cp .env.local.example .env.local ``` Then edit the `.env.local` file to include your configuration: ```env # Next.js environment NODE_ENV=development # API endpoints (if applicable) # NEXT_PUBLIC_API_URL=http://localhost:3001/api # Analytics (if self-hosted) # NEXT_PUBLIC_PLAUSIBLE_DOMAIN=your-domain.com # NEXT_PUBLIC_PLAUSIBLE_API_HOST=https://plausible.your-domain.com # Contact form submission endpoint # CONTACT_FORM_ENDPOINT=https://n8n.your-domain.com/webhook/contact-form # Calendly integration (if applicable) # CALENDLY_URL=https://calendly.com/your-calendly-url ``` ### Development To run the development server: ```bash # Install dependencies pnpm install # Run the development server pnpm dev ``` Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. ### Docker Deployment To build and run the application using Docker: 1. Build the Docker image: ```bash docker build -t fortura-website -f apps/www/Dockerfile . ``` 2. Run the container: ```bash docker run -p 3000:3000 --env-file .env.local fortura-website ``` Alternatively, use docker-compose: ```bash docker-compose up --build ``` The application will be available at [http://localhost:3000](http://localhost:3000). ### Production Build To create a production build: ```bash # Build the application pnpm build # Start the production server pnpm start ``` ## Troubleshooting ### TS2742 from Fumadocs generated files (Next.js 15 type-check) TypeScript can flag the generated Fumadocs output in `apps/www/.source/index.ts` because the inferred type of `docs` references private internals from `fumadocs-mdx/dist/...`. Next 15 enforces strict type portability and fails with TS2742. Fast unblock (recommended and safe): exclude generated files from type-check. 1) Ensure `apps/www/tsconfig.json` excludes the generated folder and relaxes lib checks: ```json { "compilerOptions": { "skipLibCheck": true }, "exclude": [ ".source", ".source/**/*" ] } ``` 2) Clean and rebuild the app: ```bash rm -rf apps/www/.source pnpm -C apps/www build ``` Proper fix (long-term): align Fumadocs + Zod and regenerate. 1) Upgrade deps (workspace-wide): ```bash pnpm -w up fumadocs-mdx@latest fumadocs-core@latest fumadocs-ui@latest @types/mdx@latest pnpm -w up zod@^4 ``` 2) Regenerate the `.source` output: ```bash rm -rf apps/www/.source pnpm -C apps/www build ``` 3) If the generator still emits a generic that triggers TS2742, enforce a portable annotation in `apps/www/.source/index.ts` (temporary): ```ts import { _runtime } from 'fumadocs-mdx'; type DocsData = ReturnType; export const docs: DocsData = _runtime.docs(/* generated arrays */); // or fallback: export const docs: unknown = _runtime.docs(/* generated arrays */); ``` Note: Keeping `.source` excluded from type-checks is fine even after upgrades; it also speeds up CI. ## Documentation Detailed documentation for Fortura's services, migration guides, and operational procedures is available to clients on our internal portal. ## License This website's code is licensed under a proprietary license. See [LICENSE.md](LICENSE.md) for details.