Fortura Data Solutions
A high-performance, cost-effective, and privacy-first alternative to cloud hosting for enterprises.
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:
# 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:
# 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:
# Install dependencies
pnpm install
# Run the development server
pnpm dev
Open http://localhost:3000 with your browser to see the result.
Docker Deployment
To build and run the application using Docker:
-
Build the Docker image:
docker build -t fortura-website -f apps/www/Dockerfile . -
Run the container:
docker run -p 3000:3000 --env-file .env.local fortura-website
Alternatively, use docker-compose:
docker-compose up --build
The application will be available at http://localhost:3000.
Production Build
To create a production build:
# 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.
- Ensure
apps/www/tsconfig.jsonexcludes the generated folder and relaxes lib checks:
{
"compilerOptions": {
"skipLibCheck": true
},
"exclude": [
".source",
".source/**/*"
]
}
- Clean and rebuild the app:
rm -rf apps/www/.source
pnpm -C apps/www build
Proper fix (long-term): align Fumadocs + Zod and regenerate.
- Upgrade deps (workspace-wide):
pnpm -w up fumadocs-mdx@latest fumadocs-core@latest fumadocs-ui@latest @types/mdx@latest
pnpm -w up zod@^4
- Regenerate the
.sourceoutput:
rm -rf apps/www/.source
pnpm -C apps/www build
- If the generator still emits a generic that triggers TS2742, enforce a portable annotation in
apps/www/.source/index.ts(temporary):
import { _runtime } from 'fumadocs-mdx';
type DocsData = ReturnType<typeof _runtime.docs>;
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 for details.
