Compare commits

...

2 Commits

Author SHA1 Message Date
fe3b7753f4 ok 2025-06-12 13:39:08 +02:00
ade2530257 add projects 2025-06-12 11:57:15 +02:00
35 changed files with 373 additions and 28 deletions

79
.gitignore vendored
View File

@ -1,55 +1,92 @@
# dependencies
# Dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz
# testing
# Testing
/coverage
# next.js
# Next.js
/.next/
/out/
/build
.next/
next-env.d.ts
.vercel
*.tsbuildinfo
# Cache
.cache/
.eslintcache
.stylelintcache
*.pack.gz
app-build-manifest.json
app-paths-manifest.json
trace
*.pack.gz
/next/cache/
/next/static/chunks/
# production
# Production
/build
/dist
*.log
# misc
.DS_Store
*.pem
# debug
# Debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# local env files
.env*.local
# Local env files
.env
.env*.local
.env.development
.env.test
.env.production
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
.env.local
.env.development.local
.env.test.local
.env.production.local
# IDE
.idea/
.vscode/
.idea
.vscode
*.swp
*.swo
*.swn
*.bak
*.orig
# OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Misc
*.pem
.npmrc
.yarnrc
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# TypeScript
*.tsbuildinfo
# Optional npm cache directory
.npm

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -130,7 +130,7 @@
/******/
/******/ /* webpack/runtime/getFullHash */
/******/ (() => {
/******/ __webpack_require__.h = () => ("a667c6158f1911e7")
/******/ __webpack_require__.h = () => ("b95c8cbc77f901fb")
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */

View File

@ -25,7 +25,7 @@ eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpa
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"c6d264bb68a0\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9zdHlsZXMvdGFpbHdpbmQuY3NzIiwibWFwcGluZ3MiOiI7QUFBQSwrREFBZSxjQUFjO0FBQzdCLElBQUksSUFBVSxJQUFJLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9zcmMvc3R5bGVzL3RhaWx3aW5kLmNzcz83NTBkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiYzZkMjY0YmI2OGEwXCJcbmlmIChtb2R1bGUuaG90KSB7IG1vZHVsZS5ob3QuYWNjZXB0KCkgfVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/styles/tailwind.css\n"));
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"2d0f81ac17c0\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9zdHlsZXMvdGFpbHdpbmQuY3NzIiwibWFwcGluZ3MiOiI7QUFBQSwrREFBZSxjQUFjO0FBQzdCLElBQUksSUFBVSxJQUFJLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9zcmMvc3R5bGVzL3RhaWx3aW5kLmNzcz83NTBkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiMmQwZjgxYWMxN2MwXCJcbmlmIChtb2R1bGUuaG90KSB7IG1vZHVsZS5ob3QuYWNjZXB0KCkgfVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/styles/tailwind.css\n"));
/***/ })

View File

@ -192,7 +192,7 @@
/******/
/******/ /* webpack/runtime/getFullHash */
/******/ !function() {
/******/ __webpack_require__.h = function() { return "209bc45e80e27d6b"; }
/******/ __webpack_require__.h = function() { return "6f3fe84a2c5b5a01"; }
/******/ }();
/******/
/******/ /* webpack/runtime/global */

View File

@ -484,6 +484,9 @@
.mt-4 {
margin-top: calc(var(--spacing) * 4);
}
.mt-5 {
margin-top: calc(var(--spacing) * 5);
}
.mt-6 {
margin-top: calc(var(--spacing) * 6);
}
@ -508,6 +511,9 @@
.mt-auto {
margin-top: auto;
}
.mr-8 {
margin-right: calc(var(--spacing) * 8);
}
.mr-auto {
margin-right: auto;
}
@ -523,6 +529,12 @@
.mb-32 {
margin-bottom: calc(var(--spacing) * 32);
}
.-ml-0\.5 {
margin-left: calc(var(--spacing) * -0.5);
}
.-ml-4 {
margin-left: calc(var(--spacing) * -4);
}
.-ml-24 {
margin-left: calc(var(--spacing) * -24);
}
@ -589,10 +601,18 @@
.aspect-square {
aspect-ratio: 1 / 1;
}
.size-0\.5 {
width: calc(var(--spacing) * 0.5);
height: calc(var(--spacing) * 0.5);
}
.size-3\.75 {
width: calc(var(--spacing) * 3.75);
height: calc(var(--spacing) * 3.75);
}
.size-3\/4 {
width: calc(3/4 * 100%);
height: calc(3/4 * 100%);
}
.size-4 {
width: calc(var(--spacing) * 4);
height: calc(var(--spacing) * 4);
@ -647,6 +667,9 @@
.h-3\/4 {
height: calc(3/4 * 100%);
}
.h-4 {
height: calc(var(--spacing) * 4);
}
.h-5 {
height: calc(var(--spacing) * 5);
}
@ -713,6 +736,9 @@
.w-3xl {
width: var(--container-3xl);
}
.w-4 {
width: calc(var(--spacing) * 4);
}
.w-5 {
width: calc(var(--spacing) * 5);
}
@ -854,6 +880,9 @@
.list-disc {
list-style-type: disc;
}
.auto-rows-fr {
grid-auto-rows: minmax(0, 1fr);
}
.grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
@ -951,6 +980,12 @@
margin-block-end: calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse)));
}
}
.gap-x-2 {
column-gap: calc(var(--spacing) * 2);
}
.gap-x-2\.5 {
column-gap: calc(var(--spacing) * 2.5);
}
.gap-x-4 {
column-gap: calc(var(--spacing) * 4);
}
@ -1123,6 +1158,9 @@
.bg-gray-50 {
background-color: var(--color-gray-50);
}
.bg-gray-100 {
background-color: var(--color-gray-100);
}
.bg-gray-900 {
background-color: var(--color-gray-900);
}
@ -1322,6 +1360,10 @@
--tw-gradient-from: var(--color-gray-800);
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
.from-gray-900 {
--tw-gradient-from: var(--color-gray-900);
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
.from-green-500 {
--tw-gradient-from: var(--color-green-500);
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
@ -1412,6 +1454,14 @@
--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);
--tw-gradient-stops: var(--tw-gradient-via-stops);
}
.via-gray-900\/40 {
--tw-gradient-via: color-mix(in srgb, oklch(21% 0.034 264.665) 40%, transparent);
@supports (color: color-mix(in lab, red, red)) {
--tw-gradient-via: color-mix(in oklab, var(--color-gray-900) 40%, transparent);
}
--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);
--tw-gradient-stops: var(--tw-gradient-via-stops);
}
.via-50\% {
--tw-gradient-via-position: 50%;
}
@ -1587,6 +1637,12 @@
.fill-white {
fill: var(--color-white);
}
.fill-white\/50 {
fill: color-mix(in srgb, #fff 50%, transparent);
@supports (color: color-mix(in lab, red, red)) {
fill: color-mix(in oklab, var(--color-white) 50%, transparent);
}
}
.stroke-white {
stroke: var(--color-white);
}
@ -1647,6 +1703,9 @@
.px-6 {
padding-inline: calc(var(--spacing) * 6);
}
.px-8 {
padding-inline: calc(var(--spacing) * 8);
}
.px-\[calc\(--spacing\(2\)-1px\)\] {
padding-inline: calc(calc(var(--spacing) * 2) - 1px);
}
@ -1659,6 +1718,9 @@
.py-1\.5 {
padding-block: calc(var(--spacing) * 1.5);
}
.py-2 {
padding-block: calc(var(--spacing) * 2);
}
.py-2\.5 {
padding-block: calc(var(--spacing) * 2.5);
}
@ -1722,6 +1784,9 @@
.pt-72 {
padding-top: calc(var(--spacing) * 72);
}
.pt-80 {
padding-top: calc(var(--spacing) * 80);
}
.pt-\[calc\(--spacing\(2\)\+1px\)\] {
padding-top: calc(calc(var(--spacing) * 2) + 1px);
}
@ -1734,6 +1799,9 @@
.pb-6 {
padding-bottom: calc(var(--spacing) * 6);
}
.pb-8 {
padding-bottom: calc(var(--spacing) * 8);
}
.pb-9 {
padding-bottom: calc(var(--spacing) * 9);
}
@ -1945,6 +2013,9 @@
.text-gray-200 {
color: var(--color-gray-200);
}
.text-gray-300 {
color: var(--color-gray-300);
}
.text-gray-500 {
color: var(--color-gray-500);
}
@ -1969,6 +2040,9 @@
.text-indigo-300 {
color: var(--color-indigo-300);
}
.text-indigo-400 {
color: var(--color-indigo-400);
}
.text-indigo-600 {
color: var(--color-indigo-600);
}
@ -2100,6 +2174,12 @@
--tw-ring-color: color-mix(in oklab, var(--color-gray-900) 5%, transparent);
}
}
.ring-gray-900\/10 {
--tw-ring-color: color-mix(in srgb, oklch(21% 0.034 264.665) 10%, transparent);
@supports (color: color-mix(in lab, red, red)) {
--tw-ring-color: color-mix(in oklab, var(--color-gray-900) 10%, transparent);
}
}
.ring-gray-950\/10 {
--tw-ring-color: color-mix(in srgb, oklch(13% 0.028 261.692) 10%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@ -2157,6 +2237,11 @@
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-colors {
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-opacity {
transition-property: opacity;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@ -2450,6 +2535,13 @@
padding-bottom: calc(calc(var(--spacing) * 2) + 1px);
}
}
.hover\:bg-gray-200 {
&:hover {
@media (hover: hover) {
background-color: var(--color-gray-200);
}
}
}
.hover\:bg-indigo-500 {
&:hover {
@media (hover: hover) {
@ -2471,6 +2563,22 @@
}
}
}
.hover\:ring-gray-900\/20 {
&:hover {
@media (hover: hover) {
--tw-ring-color: color-mix(in srgb, oklch(21% 0.034 264.665) 20%, transparent);
@supports (color: color-mix(in lab, red, red)) {
--tw-ring-color: color-mix(in oklab, var(--color-gray-900) 20%, transparent);
}
}
}
}
.focus-visible\:outline {
&:focus-visible {
outline-style: var(--tw-outline-style);
outline-width: 1px;
}
}
.focus-visible\:outline-2 {
&:focus-visible {
outline-style: var(--tw-outline-style);
@ -2482,6 +2590,11 @@
outline-offset: 2px;
}
}
.focus-visible\:outline-gray-900 {
&:focus-visible {
outline-color: var(--color-gray-900);
}
}
.focus-visible\:outline-indigo-600 {
&:focus-visible {
outline-color: var(--color-indigo-600);
@ -2953,6 +3066,11 @@
padding-top: calc(var(--spacing) * 40);
}
}
.sm\:pt-48 {
@media (width >= 40rem) {
padding-top: calc(var(--spacing) * 48);
}
}
.sm\:text-5xl {
@media (width >= 40rem) {
font-size: var(--text-5xl);
@ -3318,6 +3436,11 @@
padding-top: calc(var(--spacing) * 45);
}
}
.lg\:pt-80 {
@media (width >= 64rem) {
padding-top: calc(var(--spacing) * 80);
}
}
.lg\:pr-8 {
@media (width >= 64rem) {
padding-right: calc(var(--spacing) * 8);

File diff suppressed because one or more lines are too long

View File

@ -8,6 +8,9 @@ import { Heading, Lead, Subheading } from '@/components/text'
import type { Metadata } from 'next'
import Ecosystem from '@/components/ecosystem'
import { RocketLaunchIcon } from '@heroicons/react/20/solid'
import Portfolio from '@/components/portfolio'
import { Testimonials } from '@/components/testimonials'
import ProjectCard from '@/components/projectcards'
export const metadata: Metadata = {
title: 'Projects',
@ -245,9 +248,7 @@ export default function Company() {
</Container>
<Header />
<Overview />
<Ecosystem />
<Team />
<Investors />
<ProjectCard />
<CTA />
<Footer />
</main>

View File

@ -0,0 +1,125 @@
'use client'
import { Button } from './button'
import { Heading, Subheading } from './text'
import { clsx } from 'clsx'
import { ChevronRightIcon } from '@heroicons/react/20/solid'
import { useState } from 'react'
const phases = ['All', 'Phase 1', 'Phase 2', 'Phase 3']
const posts = [
{
id: 1,
title: 'Boost your conversion rate',
href: '#',
description:
'Illo sint voluptas. Error voluptates culpa eligendi. Hic vel totam vitae illo. Non aliquid explicabo necessitatibus unde..',
imageUrl:
'https://images.unsplash.com/photo-1496128858413-b36217c2ce36?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=3603&q=80',
phase: 'Phase 1',
datetime: '2020-03-16',
},
{
id: 2,
title: 'Boost your conversion rate',
href: '#',
description:
'Illo sint voluptas. Error voluptates culpa eligendi. Hic vel totam vitae illo. Non aliquid explicabo necessitatibus unde..',
imageUrl:
'https://images.unsplash.com/photo-1496128858413-b36217c2ce36?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=3603&q=80',
phase: 'Phase 1',
datetime: '2020-03-16',
},
{
id: 3,
title: 'Boost your conversion rate',
href: '#',
description:
'Illo sint voluptas. Error voluptates culpa eligendi. Hic vel totam vitae illo. Non aliquid explicabo necessitatibus unde. ',
imageUrl:
'https://images.unsplash.com/photo-1496128858413-b36217c2ce36?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=3603&q=80',
phase: 'Phase 1',
datetime: '2020-03-16',
},
{
id: 1,
title: 'Boost your conversion rate',
href: '#',
description:
'Illo sint voluptas. Error voluptates culpa eligendi. Hic vel totam vitae illo. Non aliquid explicabo necessitatibus unde. ',
imageUrl:
'https://images.unsplash.com/photo-1496128858413-b36217c2ce36?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=3603&q=80',
phase: 'Phase 1',
datetime: '2020-03-16',
},
// More posts...
]
export default function ProjectCard() {
const [activePhase, setActivePhase] = useState('All')
const filteredPosts = activePhase === 'All'
? posts
: posts.filter(post => post.phase === activePhase)
return (
<div className="bg-white py-24 sm:py-32">
<div className="mx-auto max-w-7xl px-6 lg:px-8">
<div className="flex flex-col items-center space-y-8">
<div className="mx-auto max-w-2xl text-center">
<h2 className="text-4xl font-semibold tracking-tight text-balance text-gray-900 sm:text-5xl">
From foundation to contribution
</h2>
<p className="mt-2 text-lg/8 text-gray-600">Deliver transformational experiences anywhere</p>
</div>
<div className="flex justify-center gap-4">
{phases.map((phase) => (
<button
key={phase}
onClick={() => setActivePhase(phase)}
className={clsx(
'px-4 py-2 rounded-full text-sm font-medium transition-colors',
activePhase === phase
? 'bg-indigo-600 text-white'
: 'bg-gray-100 text-gray-600 hover:bg-gray-200'
)}
>
{phase}
</button>
))}
</div>
</div>
<div className="mx-auto mt-16 grid max-w-2xl auto-rows-fr grid-cols-1 gap-4 sm:mt-20 lg:mx-0 lg:max-w-none lg:grid-cols-3">
{filteredPosts.map((post) => (
<article
key={post.id}
className="relative isolate flex flex-col justify-end overflow-hidden rounded-2xl bg-gray-900 px-8 aspect-square"
>
<img alt="" src={post.imageUrl} className="absolute inset-0 -z-10 size-full object-cover aspect-square" />
<div className="absolute inset-0 -z-10 bg-linear-to-t from-gray-900 via-gray-900/40" />
<div className="absolute inset-0 -z-10 rounded-2xl ring-1 ring-gray-900/10 ring-inset" />
<div className="flex flex-wrap items-center gap-y-1 overflow-hidden text-sm/6 text-gray-300">
<time dateTime={post.datetime} className="mr-8">
{post.phase}
</time>
</div>
<h3 className="mt-3 text-lg/6 font-semibold text-white">
<a href={post.href}>
<span className="absolute inset-0" />
{post.title}
</a>
</h3>
<p className="mt-5 text-sm/7 leading-tight text-gray-100">{post.description}</p>
<a href={post.href} className="mt-6 inline-flex items-center gap-x-2 text-sm font-semibold text-indigo-400">
Read more
<ChevronRightIcon className="h-5 w-5 flex-none" aria-hidden="true" />
</a>
</article>
))}
</div>
</div>
</div>
)
}