From 17c298d6e8b4c99d94f895059e4e6e36d14adad8 Mon Sep 17 00:00:00 2001 From: Jonas Zausinger Date: Tue, 5 Nov 2024 16:21:38 +0100 Subject: [PATCH 1/2] replaced static json files with database and prisma --- README.md | 10 + app/e-lab/[id]/page.tsx | 85 ++- app/e-lab/page.tsx | 18 +- app/e-lab/startuplist/page.tsx | 13 +- app/e-lab/startups/[id]/page.tsx | 19 +- app/e-lab/team/page.tsx | 16 +- app/industry/page.tsx | 76 +- app/members/departments.tsx | 11 +- app/members/page.tsx | 6 +- app/page.tsx | 22 +- app/partners/page.tsx | 33 +- components/ELabStartupList.tsx | 8 +- components/Logos.tsx | 2 +- components/Person.tsx | 15 +- components/SocialMediaLinks.tsx | 11 +- components/StartupDetails.tsx | 85 ++- components/VentureTeam.tsx | 5 +- data/departments.tsx | 85 --- data/e-lab-startups.tsx | 158 ---- data/e-lab.tsx | 484 ------------ data/industry.tsx | 271 ------- data/partners.tsx | 355 --------- lib/db.ts | 15 + lib/utils.ts | 24 + package.json | 9 +- prisma/schema.prisma | 119 +++ prisma/seed.ts | 1174 ++++++++++++++++++++++++++++++ 27 files changed, 1667 insertions(+), 1462 deletions(-) delete mode 100644 data/departments.tsx delete mode 100644 data/e-lab-startups.tsx delete mode 100644 data/e-lab.tsx delete mode 100644 data/industry.tsx delete mode 100644 data/partners.tsx create mode 100644 lib/db.ts create mode 100644 prisma/schema.prisma create mode 100644 prisma/seed.ts diff --git a/README.md b/README.md index 382d298..ffa60d6 100644 --- a/README.md +++ b/README.md @@ -11,3 +11,13 @@ yarn dev ``` Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + + + +### Prisma + +yarn prisma db seed +yarn prisma db push +yarn prisma db pull + +yarn prisma studio \ No newline at end of file diff --git a/app/e-lab/[id]/page.tsx b/app/e-lab/[id]/page.tsx index c60ed97..0de6128 100644 --- a/app/e-lab/[id]/page.tsx +++ b/app/e-lab/[id]/page.tsx @@ -1,37 +1,50 @@ import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faArrowLeft} from "@fortawesome/free-solid-svg-icons"; -import {alumni, Person, team} from "@data/e-lab"; import Link from "next/link"; import NotFound from "next/dist/client/components/not-found-error"; import Section from "@components/ui/Section"; import Image from "next/image"; import {ProfilePage, WithContext} from "schema-dts"; import SocialMediaLinks from "@components/SocialMediaLinks"; +import prisma from "../../../lib/db"; -export function generateStaticParams() { - return team.map((person) => ({ +export async function generateStaticParams() { + // get all persons from prisma which type is elab-team or elab-alumni + const team_or_alumni = await prisma.person.findMany(); + + return team_or_alumni.map((person) => ({ id: person.id, - })).concat(alumni.map((person) => ({id: person.id}))); + })); } -export function generateMetadata({params: {id}}: { params: { id: string } }) { - let person = team.find((person: Person) => id === person.id); - if(!person) { - person = alumni.find((person: Person) => id === person.id); +export async function generateMetadata({params: {id}}: { params: { id: string } }) { + const person = await prisma.person.findUnique({ + where: { + id: id + } + }) + if (!person) { + return { + title: "Person Not Found", + description: "This person does not exist.", + }; } - const name = person?.firstName + " " + person?.lastName; + + const name = person.firstName + " " + person.lastName; + return { - title: name + " - AI E-LAB | TUM.ai", - description: - "Meet " + name + " from the AI Entrepreneurship Lab. Join us if you are up for a 3-month founding journey designed to ignite your innovative spirit and equip you with the relevant know-how to build your own AI startup in Munich.", + title: `${name} - AI E-LAB | TUM.ai`, + description: `Meet ${name} from the AI Entrepreneurship Lab. Join us if you are up for a 3-month founding journey designed to ignite your innovative spirit and equip you with the relevant know-how to build your own AI startup in Munich.`, }; } -export default function Page({params: {id}}: { params: { id: string } }) { - let person = team.find((person: Person) => id === person.id); - if (!person) { - person = alumni.find((person: Person) => id === person.id); - } +export default async function Page({params: {id}}: { params: { id: string } }) { + const person = await prisma.person.findUnique({ + where: { + id: id + } + }) + if (!person) { return ; } @@ -45,12 +58,12 @@ export default function Page({params: {id}}: { params: { id: string } }) { name: person.firstName + ' ' + person.lastName, givenName: person.firstName, familyName: person.lastName, - description: person.description, + description: person.description ?? '', image: 'https://www.tum-ai.com' + person.imgSrc, - email: person.socialMedia.email, + email: person.email ?? '', worksFor: { '@type': 'EmployeeRole', - roleName: person.role, + roleName: person.role ?? '', worksFor: { '@type': 'Organization', name: 'Venture Department', @@ -67,11 +80,11 @@ export default function Page({params: {id}}: { params: { id: string } }) { }, url: 'https://www.tum-ai.com/e-lab/' + person.id, sameAs: [ - person.socialMedia.linkedin, - person.socialMedia.x ? person.socialMedia.x : "", - person.socialMedia.instagram ? person.socialMedia.instagram : "", - person.socialMedia.youtube ? person.socialMedia.youtube : "", - person.socialMedia.website ? person.socialMedia.website : "", + person.linkedin ?? '', + person.x ?? '', + person.instagram ?? '', + person.youtube ?? '', + person.website ?? '', ], }, } @@ -122,7 +135,14 @@ export default function Page({params: {id}}: { params: { id: string } }) {

Social Media Links

- +
@@ -140,11 +160,11 @@ export default function Page({params: {id}}: { params: { id: string } }) {
{person?.imgAlt}
@@ -164,7 +184,14 @@ export default function Page({params: {id}}: { params: { id: string } }) {

- +
diff --git a/app/e-lab/page.tsx b/app/e-lab/page.tsx index fcea370..aa761ca 100644 --- a/app/e-lab/page.tsx +++ b/app/e-lab/page.tsx @@ -7,19 +7,18 @@ import Timeline from "@components/Timeline"; import Section from "@components/ui/Section"; import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "@components/ui/carousel"; import Card from "@components/ui/Card"; -import { startups } from "data/e-lab-startups"; import { faBook, faCircleNodes, faHandshakeSimple, faHandsHoldingCircle, } from "@fortawesome/free-solid-svg-icons"; -import { faq, testimonials } from "data/e-lab"; import Link from "next/link"; import { Hero } from "./hero"; import type { Metadata } from "next"; import VentureTeam from "@components/VentureTeam"; import {Organization, WithContext} from "schema-dts"; +import prisma from "../../lib/db"; export const metadata: Metadata = { title: "TUM.ai - AI Entrepreneurship Lab", @@ -41,7 +40,7 @@ export const metadata: Metadata = { }, }; -export default function Page() { +export default async function Page() { const jsonLd: WithContext = { '@context': 'https://schema.org', '@type': 'Organization', @@ -96,6 +95,15 @@ export default function Page() { }, } + const testimonials = await prisma.testimonial.findMany(); + const faq = await prisma.fAQ.findMany(); + const startups = await prisma.startup.findMany(); + const venture_team = await prisma.person.findMany({ + where: { + type: "elab-team" + } + }); + return ( <> @@ -192,7 +200,7 @@ export default function Page() { className="h-full" /> - ))} + ))} @@ -424,7 +432,7 @@ export default function Page() { - +
diff --git a/app/e-lab/startuplist/page.tsx b/app/e-lab/startuplist/page.tsx index 06e73c4..01aa50d 100644 --- a/app/e-lab/startuplist/page.tsx +++ b/app/e-lab/startuplist/page.tsx @@ -2,7 +2,7 @@ import type { Metadata } from "next"; import Section from "@ui/Section"; import Link from "next/link"; import StartupList from "@components/ELabStartupList"; -import { startups } from "data/e-lab-startups"; +import prisma from "../../../lib/db"; // Define the metadata for the page export const metadata: Metadata = { @@ -10,7 +10,16 @@ export const metadata: Metadata = { description: "Registry of all E-Lab based Startups.", }; -export default function Page() { +export default async function Page() { + const startups = await prisma.startup.findMany({ + include: { + metrics: true, + founders: true, + jobs: true, + latestNews: true + }, + }); + return ( <> {/* Hidden Title for Accessibility */} diff --git a/app/e-lab/startups/[id]/page.tsx b/app/e-lab/startups/[id]/page.tsx index f55f9ab..787eada 100644 --- a/app/e-lab/startups/[id]/page.tsx +++ b/app/e-lab/startups/[id]/page.tsx @@ -1,13 +1,18 @@ -import { startups, Startup} from '@data/e-lab-startups'; import StartupDetails from '@components/StartupDetails'; +import prisma from "../../../../lib/db"; -export default function StartupPage({ params }: { params: { id: string } }) { +export default async function StartupPage({ params }: { params: { id: string } }) { - const startup: Startup | undefined = startups.find((startup: Startup) => { - if (startup && startup.id === params.id) { - return startup; - } - return undefined; + const startup = await prisma.startup.findUnique({ + where: { + id: params.id + }, + include: { + metrics: true, + founders: true, + jobs: true, + latestNews: true + }, }); if (!startup) { diff --git a/app/e-lab/team/page.tsx b/app/e-lab/team/page.tsx index c514bfb..e29dca9 100644 --- a/app/e-lab/team/page.tsx +++ b/app/e-lab/team/page.tsx @@ -1,9 +1,9 @@ import type {Metadata} from "next"; import Section from "@ui/Section"; import Link from "next/link"; -import {alumni, faq, team} from "../../../data/e-lab"; import FAQ from "@components/FAQ"; import Person from "@components/Person"; +import prisma from "../../../lib/db"; export const metadata: Metadata = { title: "Team - AI E-LAB | TUM.ai", @@ -11,7 +11,19 @@ export const metadata: Metadata = { "Meet the Team behind the AI Entrepreneurship Lab. Join us if you are up for a 3-month founding journey designed to ignite your innovative spirit and equip you with the relevant know-how to build your own AI startup in Munich.", }; -export default function Page() { +export default async function Page() { + const team = await prisma.person.findMany({ + where: { + type: "elab-team" + } + }); + const alumni = await prisma.person.findMany({ + where: { + type: "elab-alumni" + } + }); + const faq = await prisma.fAQ.findMany(); + return ( <>

Meet the Team behind the AI E-LAB | Venture Department Members

diff --git a/app/industry/page.tsx b/app/industry/page.tsx index 805693d..0af66ca 100644 --- a/app/industry/page.tsx +++ b/app/industry/page.tsx @@ -3,7 +3,6 @@ import Button from "@components/ui/Button"; import Dialog from "@components/ui/Dialog"; import Tabs from "@components/ui/Tabs"; import Section from "@ui/Section"; -import { partners_ip5, projects } from "data/industry"; import Image from "next/image"; import Link from "next/link"; import PictureHero from "@components/BannerHero"; @@ -11,6 +10,7 @@ import { bitter } from "@styles/fonts"; import { cx } from "class-variance-authority"; import { StudentsSection } from "./studentsSection"; import { Metadata } from "next"; +import prisma from "../../lib/db"; export const metadata: Metadata = { title: "TUM.ai - Industry", @@ -18,7 +18,54 @@ export const metadata: Metadata = { "Work on real-world AI and Data solutions! 2250€ total compensation, 10 week working student arrangements, September 15th - end of November", }; -export default function Industry() { +function parseTextWithLinks(text: string) { + const linkRegex = /]+)>/g; + const parts = []; + let lastIndex = 0; + let match; + + // Find all LINK tags in the text and extract their details + while ((match = linkRegex.exec(text)) !== null) { + const [fullMatch, url, displayText] = match; + + // Add the text before the link as a normal text node + if (match.index > lastIndex) { + parts.push(text.slice(lastIndex, match.index)); + } + + // Add the link element + parts.push( + + {displayText} + + ); + + // Update the lastIndex to the end of the current match + lastIndex = match.index + fullMatch.length; + } + + // Add any remaining text after the last link + if (lastIndex < text.length) { + parts.push(text.slice(lastIndex)); + } + + return parts; +} + +export default async function Industry() { + const projects = await prisma.project.findMany() + const partners_ip5 = await prisma.partner.findMany({ + where: { + type: "partners_ip5" + } + }) + return ( <>

- {project.description.map((section, index) => ( - - {section.text && `${section.text} `} - - {!!section.link && - section.link.map((link, i) => ( - <> - - {link.displayText} - - {i < section.link!.length - 1 && ", "} - - ))} - {section.moreText && ` ${section.moreText}`} - - ))} + {project.description && ( + <>{parseTextWithLinks(project.description)} + )}

diff --git a/app/members/departments.tsx b/app/members/departments.tsx index 0626433..dbe8bf1 100644 --- a/app/members/departments.tsx +++ b/app/members/departments.tsx @@ -1,10 +1,11 @@ "use client"; +import { Department } from '@prisma/client'; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { Department, departments } from "data/departments"; import { AnimatePresence, motion } from "framer-motion"; import Image from "next/image"; import { Dispatch, SetStateAction, useState } from "react"; +import {iconMap} from "../../lib/utils"; interface DepartmentCardProps { department: Department; @@ -19,7 +20,9 @@ const DepartmentCard = ({ setOpen, index, }: DepartmentCardProps) => { - return ( + + const icon = iconMap[department.icon]!; + return (
- +

{department.name}

@@ -59,7 +62,7 @@ const DepartmentCard = ({ ); }; -export const DepartmentList = () => { +export const DepartmentList = ({ departments }: { departments: Department[] }) => { const [open, setOpen] = useState(); return ( diff --git a/app/members/page.tsx b/app/members/page.tsx index 3af7bd9..98c2525 100644 --- a/app/members/page.tsx +++ b/app/members/page.tsx @@ -4,12 +4,14 @@ import { cx } from "class-variance-authority"; import Hero from "@components/Hero"; import { DepartmentList } from "./departments"; import type { Metadata } from "next"; +import prisma from "../../lib/db"; export const metadata: Metadata = { title: "TUM.ai - Members", }; -export default function Members() { +export default async function Members() { + const departments = await prisma.department.findMany(); return ( <>
- +
); diff --git a/app/page.tsx b/app/page.tsx index 8b1e47d..3645bd6 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -8,16 +8,13 @@ import { cx } from "class-variance-authority"; import VerticalCards, { type Props as VerticalCardsProps, } from "components/VerticalCards"; -import { - initiatives_collabrated_with, - partners_collabrated_with, -} from "data/partners"; import Image from "next/image"; import Link from "next/link"; import MartinTalk from "@public/assets/partners/martin_talk.jpg"; import type { Metadata } from "next"; import { Hero } from "./hero"; import { Organization, WithContext } from 'schema-dts' +import prisma from "../lib/db"; export const metadata: Metadata = { title: "TUM.ai - Student Initiative focused on Artificial Intelligence", @@ -27,7 +24,7 @@ export const metadata: Metadata = { -export default function Index() { +export default async function Index() { const jsonLd: WithContext = { '@context': 'https://schema.org', @@ -151,6 +148,17 @@ export default function Index() { }, } + const initiatives_collaborated_with = await prisma.partner.findMany({ + where: { + type: "initiatives_collaborated_with" + } + }) + const partners_collaborated_with = await prisma.partner.findMany({ + where: { + type: "partners_collaborated_with" + } + }) + return ( <>
@@ -184,7 +192,7 @@ export default function Index() { Partners we have collaborated{" "} with - +
@@ -196,7 +204,7 @@ export default function Index() { > Partner Initiatives - +
diff --git a/app/partners/page.tsx b/app/partners/page.tsx index a6dd283..6201aba 100644 --- a/app/partners/page.tsx +++ b/app/partners/page.tsx @@ -14,12 +14,8 @@ import { } from "@fortawesome/free-solid-svg-icons"; import Benefits from "@components/Benefit"; import Logos from "@components/Logos"; -import { - enablers_supporters, - project_partners, - strategic_partnerts, -} from "data/partners"; import { Metadata } from "next"; +import prisma from "../../lib/db"; export const metadata: Metadata = { title: "TUM.ai - Partners", @@ -27,7 +23,7 @@ export const metadata: Metadata = { "Is your company currently facing challenges with data-driven technologies or you are looking for the greatest talent in artificial intelligence? If one of the answers is yes, become a partners.", }; -export default function Partners() { +export default async function Partners() { const benefits = [ { title: "AI Talent Pool", @@ -51,6 +47,29 @@ export default function Partners() { }, ]; + const strategic_partners = await prisma.partner.findMany({ + where: { + type: "strategic_partners" + } + }) + const enablers_supporters = await prisma.partner.findMany({ + where: { + type: "enablers_supporters" + } + }) + const project_partners = await prisma.partner.findMany({ + // type in project_partners, partners_ip4, partners_ip5, but element alt != HVB + where: { + type: { + in: ["project_partners", "partners_ip4", "partners_ip5"] + }, + alt: { + not: "HVB" + } + } + }) + + return ( <> Strategic Partners - +

diff --git a/components/ELabStartupList.tsx b/components/ELabStartupList.tsx index 9e5055e..5f8a1d3 100644 --- a/components/ELabStartupList.tsx +++ b/components/ELabStartupList.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useState, useEffect, useRef } from 'react'; -import { Startup } from '../data/e-lab-startups'; +import { Startup } from "@prisma/client" import Link from "next/link"; import '../styles/tags.css'; import Image from "next/image"; @@ -27,8 +27,8 @@ export default function StartupList({ startups, maxHeight }: StartupListProps) { // Filter startups const filterOptions = startups.reduce((acc, startup) => { filterCategories.forEach((category) => { - if (startup[category] && !acc[category]?.includes(startup[category] as string)) { - acc[category]?.push(startup[category] as string); + if (startup[category] && !acc[category]?.includes(startup[category]!)) { + acc[category]?.push(startup[category]!); } }); return acc; @@ -44,7 +44,7 @@ export default function StartupList({ startups, maxHeight }: StartupListProps) { const matchesFilters = Object.entries(selectedFilters).every(([key, values]) => { if (!values.length) return true; - return values.includes(startup[key as keyof Startup] as string); + return values.includes(startup[key as keyof Startup]!); }); return matchesFilters && matchesSearchQuery; diff --git a/components/Logos.tsx b/components/Logos.tsx index 4a424f5..8229ee8 100644 --- a/components/Logos.tsx +++ b/components/Logos.tsx @@ -6,7 +6,7 @@ export interface LogosProps { src: string; alt: string; href: string; - width?: number; + width?: number | null; }[]; } diff --git a/components/Person.tsx b/components/Person.tsx index 5b71fa2..eda4b98 100644 --- a/components/Person.tsx +++ b/components/Person.tsx @@ -1,7 +1,7 @@ import Link from "next/link"; -import {Person} from "@data/e-lab"; import Image from "next/image"; import SocialMediaLinks from "@components/SocialMediaLinks"; +import {Person} from "@prisma/client"; interface PersonProps { person: Person; @@ -13,11 +13,11 @@ export default function Person ({person}:PersonProps) {
{person?.imgAlt}
@@ -33,7 +33,14 @@ export default function Person ({person}:PersonProps) {

- +
diff --git a/components/SocialMediaLinks.tsx b/components/SocialMediaLinks.tsx index f5d39e7..0e72762 100644 --- a/components/SocialMediaLinks.tsx +++ b/components/SocialMediaLinks.tsx @@ -2,7 +2,16 @@ import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faInstagram, faLinkedin, faXTwitter, faYoutube} from "@fortawesome/free-brands-svg-icons"; import {faEnvelope, faLink} from "@fortawesome/free-solid-svg-icons"; import Link from "next/link"; -import {SocialMedia} from "@data/e-lab"; + +export interface SocialMedia { + linkedin?: string | null; + x?: string | null; + instagram?: string | null; + youtube?: string | null; + website?: string | null; + email?: string | null; + +} function SocialMediaLinks(props: { socialMedia: SocialMedia, iconClassNames: string}) { return <> diff --git a/components/StartupDetails.tsx b/components/StartupDetails.tsx index e730d77..dff3bdd 100644 --- a/components/StartupDetails.tsx +++ b/components/StartupDetails.tsx @@ -1,14 +1,85 @@ "use client"; - import Image from 'next/image'; import Link from 'next/link'; import { useState } from 'react'; import Person from "@components/Person"; -import {Startup} from "@data/e-lab-startups"; +import {Person as PersonType} from "@prisma/client"; import SocialMediaLinks from "@components/SocialMediaLinks"; +export interface Metric { + id: string; + startupId: string; + key: string; + value: string; +} + +export interface Job { + id: string; + startupId: string; + name: string; + location: string; + salary: string; + experience: string; + +} + +export interface LatestNews { + id: string; + startupId: string; + message: string; + link: string; + date : string; +} + +/*export interface PersonType { + id: string; + firstName: string; + lastName: string; + role?: string; + description?: string; + imgSrc?: string; + imgAlt?: string; + linkedin?: string; + x?: string; + instagram?: string; + youtube?: string; + website?: string; + email?: string; + type: string; +}*/ + +export interface Startup { + id: string; + name: string; + description: string; + website: string; + logo: string; + about?: string; + tag?: string; + batch?: string; + industry: string; + linkedin?: string; + x?: string; + instagram?: string; + youtube?: string; + email?: string; + jobs?: Job[]; + latestNews: LatestNews[]; + metrics: Metric[]; + founders: PersonType[]; +} + const StartupDetails = ({ startup }: { startup: Startup }) => { const [imageError, setImageError] = useState(false); + const socialMedia = { + linkedin: startup.linkedin, + x: startup.x, + instagram: startup.instagram, + youtube: startup.youtube, + website: startup.website, + email: startup.email + } + const has_any_social_media = Object.values(socialMedia).some((value) => value !== null); return (
@@ -31,9 +102,9 @@ const StartupDetails = ({ startup }: { startup: Startup }) => {

Social Media Links

- {startup.socialMedia && ( + {has_any_social_media && (
-
)} @@ -45,9 +116,9 @@ const StartupDetails = ({ startup }: { startup: Startup }) => {

Metrics

    - {Object.entries(startup.metrics).map(([key, value]) => ( -
  • - {key}: {String(value)} + {startup.metrics.map((metric) => ( +
  • + {metric.key}: {String(metric.value)}
  • ))}
diff --git a/components/VentureTeam.tsx b/components/VentureTeam.tsx index b6a9618..4f49b40 100644 --- a/components/VentureTeam.tsx +++ b/components/VentureTeam.tsx @@ -1,10 +1,11 @@ import Section from "@ui/Section"; -import { team } from "../data/e-lab"; import Person from "@components/Person"; import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "@components/ui/carousel"; import Link from "next/link"; +import { Person as PersonType} from "@prisma/client"; + +export default function VentureTeam({ team }: { team: PersonType[] }) { -export default function VentureTeam() { return (
diff --git a/data/departments.tsx b/data/departments.tsx deleted file mode 100644 index 8cc1eb9..0000000 --- a/data/departments.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { - IconDefinition, - faBullhorn, - faCode, - faFileContract, - faGraduationCap, - faHandshakeSimple, - faIndustry, - faLaptop, - faRocket, - faUserGroup, -} from "@fortawesome/free-solid-svg-icons"; - -export interface Department { - name: string; - description: string; - image: string; - icon: IconDefinition; -} - -export const departments: Department[] = [ - { - name: "Makeathon", - description: - "Organizing the largest Makeathon in Munich, a virtual 48-hour challenge where you develop a real-world business case involving AI. We will provide helpful workshops and insightful business talks, as well as assistance from mentors and industry experts.", - image: "/assets/departments/makeathon.png", - icon: faLaptop, - }, - { - name: "Venture", - description: - "The Venture department is mainly focused on bridging the gap between ideas and building the next successful AI startups. We are dedicated to fostering innovation and an entrepreneurial spirit among all TUM.ai members!", - image: "/assets/departments/venture.jpg", - icon: faRocket, - }, - { - name: "Industry", - description: - "The Industry Team provides project opportunities with industry partners during the lecture-free period. We help TUM.ai members to apply AI in real world company challenges - bridging the gap between theory and practice.", - image: "/assets/departments/industry.png", - icon: faIndustry, - }, - { - name: "Education", - description: - "The Education department educates TUM.ai members and the public about AI in all possible domains. We are responsible for creating educational content, organize educational events and spread knowledge - from beginner to expert level.", - image: "/assets/departments/education.jpg", - icon: faGraduationCap, - }, - { - name: "Software dev", - description: - "The Software Development Department (DEV) is crucial for running the group TUM.ai in an efficient, modern and collaborative way. It is responsible for implementing in-house software tools, cloud services and the initiative's SaaS infrastructure.", - image: "/assets/departments/software_dev.jpg", - icon: faCode, - }, - { - name: "Legal & Finance", - description: - "The Legal & Finance Department is responsible for making sure that TUM.ai acts accordingly to all relevant laws. In regard to that, one of our main tasks is to account for all incoming and outgoing capital streams to ensure that TUM.ai keeps its non-profit status.", - image: "/assets/departments/legal_and_finance.jpg", - icon: faFileContract, - }, - { - name: "Community", - description: - "The people are the biggest asset of any organization! Even more so in student initiatives, the community is the driving force behind the overall success of the initiative. Therefore, the community department manages gatherings, buddy events and the overall recruitment process.", - image: "/assets/departments/community.png", - icon: faUserGroup, - }, - { - name: "Marketing & PR", - description: - "The marketing department is about promoting the vision and mission of TUM.ai, serving as the face of our community, coordinating and producing all materials representing TUM.ai. Reaching out to create an overarching image that represents our initiative in a positive light.", - image: "/assets/departments/marketing_and_pr.jpg", - icon: faBullhorn, - }, - { - name: "Partners & Sponsors", - description: - "We make sure that we cooperate with the most awesome partners and sponsors and thereby strengthen the TUM.AI network. Our partner- and sponsorships are the basis for creating ambitious events and project collaborations. ", - image: "/assets/departments/partners_and_sponsors.jpg", - icon: faHandshakeSimple, - }, -]; diff --git a/data/e-lab-startups.tsx b/data/e-lab-startups.tsx deleted file mode 100644 index 922ac4e..0000000 --- a/data/e-lab-startups.tsx +++ /dev/null @@ -1,158 +0,0 @@ - -import {Person, SocialMedia} from "@data/e-lab"; - - -export interface Startup { - id: string; - name: string; - description: string; - founders: Person[]; - metrics: Metrics; - website: string; - socialMedia?: SocialMedia; - logo: string; - about?: string; - - tag?: string; - batch?: string; - industry: string; - jobs?: Job[]; - latest_news?: LatestNews[]; -} - -export interface Founder { - name: string; - role: string; -} - -export type Metrics = Record; - -export interface Job { - name: string; - location: string; - salary: string; - experience: string; -} - -export interface LatestNews { - message: string; - link: string; - date: string; -} - -export const startups: Startup[] = [ - { - id: "airbnb", - name: "Airbnb", - description: "Airbnb is an online marketplace for short-term homestays and experiences.", - founders: [ - { - id: "brian-chesky", - firstName: "Brian", - lastName: "Chesky", - role: "CEO, Co-founder", - imgSrc: "", - imgAlt: "Brian Chesky", - socialMedia: { - x: "https://twitter.com/bchesky", - linkedin: "https://www.linkedin.com/in/brian-chesky-5b695b", - } - }, - ], - metrics: { - "Year Founded": "2008", - "Valuation": "$113 billion", - "Funding Raised": "$6.4 billion", - "Employees": "6,132" - }, - about: "Airbnb has revolutionized the travel industry by allowing homeowners to rent out their spaces to travelers. Founded in 2008, the company has grown from a small startup to a global phenomenon, operating in over 220 countries and regions. Airbnb's platform not only provides unique accommodation options for travelers but also empowers hosts to earn extra income. The company's success lies in its ability to create a trusted community marketplace and its continuous innovation in the travel and hospitality sector.", - website: "https://www.airbnb.com", - logo: "/assets/e-lab/startups/Airbnb_Logo_Bélo.svg.png", - industry: "Travel & Hospitality", - batch: "W09", - tag: "Is Hiring", - jobs: [{ - name: "Staff Software Engineer, Checkr Pay", - location: "San Francisco, CA", - salary: "$200,000 - $250,000 a year", - experience: "5+ years", - }], - latest_news: [{ - message: "Airbnb is hiring a Staff Software Engineer, Checkr Pay in San Francisco, CA. The salary is $200,000 - $250,000 a year and requires 5+ years of experience.", - link: "https://www.theverge.com/2023/5/9/23716903/airbnb-ceo-brian-chesky-rooms-ai-travel-future-of-work-summer-2023", - date: "May 9, 2023", - }, { - message: "Airbnb is hiring a Staff Software Engineer, Checkr Pay in San Francisco, CA. The salary is $200,000 - $250,000 a year and requires 5+ years of experience.", - link: "https://www.theverge.com/2023/5/9/23716903/airbnb-ceo-brian-chesky-rooms-ai-travel-future-of-work-summer-2023", - date: "June 9, 2023", - }], - }, - - { - id: "tesla", - name: "Tesla", - description: "Tesla, Inc. is accelerating the world's transition to sustainable energy with electric cars, solar and integrated renewable energy solutions for homes and businesses. Founded in 2003 by a group of engineers who wanted to prove that people didn’t need to compromise to drive electric – that electric vehicles can be better, quicker and more fun to drive than gasoline cars.", - founders: [ - ], - metrics: { - "Year Founded": "2008", - "Valuation": "$113 billion", - "Funding Raised": "$6.4 billion", - "Employees": "6,132" - }, - website: "http://tesla.com", - logo: "/assets/e-lab/startups/Tesla_Motors.svg.png", - industry: "Automotive", - batch: "S10", - tag: "Is Hiring", - jobs: [{ - name: "Senior Autopilot Software Engineer", - location: "Palo Alto, CA", - salary: "$180,000 - $230,000 a year", - experience: "4+ years", - }], - latest_news: [{ - message: "Tesla is looking for a Senior Autopilot Software Engineer in Palo Alto, CA. The salary range is $180,000 - $230,000 a year with a requirement of 4+ years of experience.", - link: "https://www.tesla.com/blog/autopilot-future-of-driving", - date: "April 15, 2023", - }, { - message: "Tesla announces a new project to expand its energy storage solutions, aiming to revolutionize the electric grid.", - link: "https://www.tesla.com/blog/energy-storage-solutions", - date: "May 20, 2023", - }], - }, - - { - id: "tesla1", - name: "Tesla1", - description: "Tesla, Inc. is accelerating the world's transition to sustainable energy with electric cars, solar and integrated renewable energy solutions for homes and businesses. Founded in 2003 by a group of engineers who wanted to prove that people didn’t need to compromise to drive electric – that electric vehicles can be better, quicker and more fun to drive than gasoline cars.", - founders: [ - ], - metrics: { - "Year Founded": "2008", - "Valuation": "$113 billion", - "Funding Raised": "$6.4 billion", - "Employees": "6,132" - }, - website: "http://tesla1.com", - logo: "/assets/e-lab/startups/Tesla_Motors.svg.png", - industry: "Automotive", - batch: "S10", - tag: "Is Hiring", - jobs: [{ - name: "Senior Autopilot Software Engineer", - location: "Palo Alto, CA", - salary: "$180,000 - $230,000 a year", - experience: "4+ years", - }], - latest_news: [{ - message: "Tesla is looking for a Senior Autopilot Software Engineer in Palo Alto, CA. The salary range is $180,000 - $230,000 a year with a requirement of 4+ years of experience.", - link: "https://www.tesla.com/blog/autopilot-future-of-driving", - date: "April 15, 2023", - }, { - message: "Tesla announces a new project to expand its energy storage solutions, aiming to revolutionize the electric grid.", - link: "https://www.tesla.com/blog/energy-storage-solutions", - date: "May 20, 2023", - }], - }, -]; \ No newline at end of file diff --git a/data/e-lab.tsx b/data/e-lab.tsx deleted file mode 100644 index 9c260d8..0000000 --- a/data/e-lab.tsx +++ /dev/null @@ -1,484 +0,0 @@ -export const partners = [ - { - href: "https://www.atoss.com/de", - src: "/assets/industry/partners/ATOSS.png", - alt: "atoss", - }, - { - href: "https://www.hypovereinsbank.de", - src: "/assets/industry/partners/HVB_2.png", - alt: "hypovereinsbank", - }, - { - href: "https://www.infineon.com/cms/de/", - src: "/assets/industry/partners/infineon_logo.png", - alt: "infineon", - }, - { - href: "https://www.prosiebensat1.com", - src: "/assets/industry/partners/P7S1_transparent.png", - alt: "prosiebensat1", - }, - { - href: "https://www.sportortho.mri.tum.de", - src: "/assets/industry/partners/MRI.png", - alt: "MRI", - }, - { - href: "https://neuralprophet.com", - src: "/assets/industry/partners/neuralprophet_logo.png", - alt: "neuralprophet", - }, - { - href: "https://eyeo.com", - src: "/assets/industry/partners/eyeo.png", - alt: "eyeo", - }, - { - href: "https://gruppe.schwarz", - src: "/assets/industry/partners/schwarzgroup_edit_cropped.png", - alt: "Schwarz Gruppe", - }, - { - href: "https://www.rohde-schwarz.com/de", - src: "/assets/industry/partners/RandS.png", - alt: "Rhode-Schwarz", - }, -]; - -export const testimonials = [ - { - imgSrc: "/assets/e-lab/testimonials/ikigai_team.png", - name: "Team ikigai", - text: 'The AI E Lab was one of the few "non-bullshit" sources during our journey. It was a sandbox full of other really cool people truly wanting to challenge themselves and their idea. Through those interactions could we understand our own business better, share insights and give back to the community and feel like every single one of the people there will walk out of the AI E Lab with a new perspective!', - logoSrc: "/assets/e-lab/testimonials/ikigai.png", - logoAlt: "ikigai", - link: "https://www.linkedin.com/company/get-ikigai/", - company: "https://www.get-ikigai.com/" - }, - { - imgSrc: "/assets/e-lab/testimonials/florian_scherl.jpg", - name: "Florian Scherl", - text: "I really loved the abundance of pitch events. It not only immensely improved my pitching but I also received priceless feedback for my idea and even found my NLP team lead at the final pitch. I definitely recommend applying to the AI E-Lab and using the provided knowledge and resources to the fullest. They offer great advice and guidance. Lastly, I greatly appreciated the peer-to-peer exchange. They absolutely brought the brightest minds together to start new thriving ventures.", - logoSrc: "/assets/e-lab/testimonials/fast_ai_movies.png", - logoAlt: "FAST AI Movies", - link: "https://www.linkedin.com/in/florian-scherl/", - company: "https://fast-ai-movies.de/" - }, - { - imgSrc: "/assets/e-lab/testimonials/tom_doerr.jpeg", - name: "Tom Dörr", - text: "I gained real, usable insights into the world of start-ups, including the ins and outs of fundraising. The feedback of others added layers to my understanding and helped refine my ideas. The interactive nature of the sessions, were great, the one on product-market fit really stood out for me. One of the best parts was connecting with people who share a passion for AI. Working on projects with them has been a unique and rewarding experience.", - logoSrc: "/assets/e-lab/testimonials/conic_w.png", - logoAlt: "conic", - link: "https://www.linkedin.com/in/tom-d%C3%B6rr-912607126/", - company: "https://github.com/tom-doerr" - }, - { - imgSrc: "/assets/e-lab/testimonials/marc_alexander_kuehn.jpg", - name: "Marc Alexander Kühn (Jury)", - text: "Participating in AI E-Lab's final pitch event as a jury member was an enriching experience. It was great to see so many young people driving change in Artificial Intelligence. Also, it was thrilling to see some of the teams making significant progress after the incubation program. Above all, I believe what TUM.ai E-Lab is doing for the Munich ecosystem is of significant value. They're cultivating a vibrant environment for young, talented students and graduates to kick-start their entrepreneurial journey. Their dedication to unleashing the future of AI innovation in Munich is remarkable and I'm excited to see where their efforts will lead.", - logoSrc: "/assets/e-lab/partners/uvc_w.svg", - logoAlt: "UVC Partners", - link: "https://www.linkedin.com/in/marc-alexander-kuehn/", - company: "https://www.uvcpartners.com/" - }, - { - imgSrc: "/assets/e-lab/testimonials/maximilian_jesch.png", - name: "Maximilian Jesch (Jury)", - text: "Being a jury member at the AI Startup Contest was an exhilarating experience! The passion and innovation displayed by the participating teams left me truly impressed. Their groundbreaking ideas and impeccably delivered pitches showcased the immense potential of the next generation of AI-driven entrepreneurship. I have no doubt that these teams are on the cusp of revolutionizing the industry and driving us into an exciting AI-powered future. It's an honor to be part of their journey, and I eagerly anticipate witnessing their continued success and impact on the world.", - logoSrc: "", - logoAlt: "", - link: "https://www.linkedin.com/in/maximilian-jesch/", - company: "" - }, - - // { - // imgSrc: "/assets/e-lab/testimonials/leon_hergert.jpeg", - // name: "Leon Hergert", - // text: "As the co-founder of Spherecast, a software solution for e-commerce brands addressing stock imbalances with advanced machine learning, our journey began with the AI E-Lab program. Beyond just the network, the AI E-Lab's mentorship was instrumental. Our mentor, a seasoned e-commerce entrepreneur, continues to provide invaluable guidance and challenge us. If AI and startups excite you, whether you have an idea or seek co-founders, the AI E-Lab is the ideal platform.", - // logoSrc: "/assets/e-lab/testimonials/spherecast_ls.png", - // logoAlt: "spherecast", - // }, - // { -]; - -export interface Person { - id: string; - firstName: string; - lastName: string; - role: string; - description?: string; - imgSrc: string; - imgAlt: string; - socialMedia: SocialMedia; -} - -export interface SocialMedia { - linkedin: string; - x?: string; - instagram?: string; - youtube?: string; - website?: string; - email?: string; - -} - -export const team: Person[] = [ - { - id: "laurenz-sommerlad", - firstName: "Laurenz", - lastName: "Sommerlad", - role: "Head of Venture", - description: "Hey, I am Laurenz and lead the amazing team behind the AI E-LAB. My journey began at a young age, building my first software projects at 12 and founding a student-led startup at 15. These early experiences paved the way for my burning passion in AI, Robotics and Entrepreneurship.\n\n" + - "Here is a quick overview of my academic achievements and work:\n\n" + - "- Ranked in the Top 2% at TUM Department of Computer Science and achieved an Abitur GPA of 1.0\n" + - "- Conducting research at LMU Hospital to predict rare child diseases using federated learning-based Graph ML techniques on patient phenotypes, genes, and proteins\n" + - "- Developing perception and path planning software for an Autonomous Mars Rover participating in International Rover Competitions with WARR Space Robotics, while also leading Partner & Sponsors | PR & Marketing subteams \n" + - "- Over 2+ years of work experience as a Software Engineer in Full-Stack web-based applications (working student)\n\n" + - "Outside of my professional endeavors, I enjoy doing a lot of different sports like weight training, martial arts (Wing Chun), marathons, technical and cave diving, wakeboarding, snowboarding, and preparing for my first Ironman. I am also in love with traveling, exploring foreign cultures and learning languages including French, Spanish, Japanese & Arabic which continues to enrich my life.\n\n" + - "Driven by a desire to make the world a better place, I am committed to solving the most challenging problems with technology. Feel free to reach out — I am always up for a coffee and a good conversation! ☕", - imgSrc: "/assets/e-lab/team/laurenz_sommerlad.jpg", - imgAlt: "Laurenz Sommerlad", - socialMedia: { - linkedin: "https://www.linkedin.com/in/laurenzsommerlad/", - x: "https://x.com/Lauros_World", - instagram: "https://www.instagram.com/laurenzsommerlad/", - youtube: "https://www.youtube.com/@LaurenzSommerlad", - website: "https://laurenzsommerlad.com", - email: "laurenz.sommerlad@tum-ai.com" - } - }, - { - id: "jan-christopher-michalczik", - firstName: "Jan-Christopher", - lastName: "Michalczik", - role: "Strategy & Events", - description: "Hey, nice to meet you! During the course of my studies, I have had the chance to gather some business acumen across different B-Schools. Starting with traditional subjects like finance and accounting, I have continually expanded my horizon to areas more strongly focused on innovation and technology management. Herein, my focus currently lies on but is not limited to AI. My journey has taken me across different countries and industries like the financial sector, shipping, and fruits wholesale.\n\n" + - "More importantly, I have had the chance to get immersed in two European innovation hubs: Paris and Munich. The German capital of beer and Weißwurst specifically caught my attention due to its proximity between tech and business which is hard to find elsewhere at the same scale. In the two years since I stepped my foot into the city, it has done everything else but disappointed. So, I am looking very forward to learning how you are contributing to this awesome vibe!\n\n" + - "Whatever your challenge is, I am here to help you solve it. I cannot wait to brainstorm with you or connect you to one of the numerous experts that TUM.ai will get you access to. From organizing last year's E-Lab, I can tell you that our participants, organizers, and partners made it a blast. So, get your act together, handle your responsibilities, and make sure you set aside some time for this program. It is worth it!\n\n"+ - "If you need more info than is presented on our website, sign up for our newsletter, go to one of our info events, or just reach out directly.", - imgSrc: "/assets/e-lab/team/jan_michalczik.png", - imgAlt: "Jan-Christopher Michalczik", - socialMedia: { - linkedin: "https://www.linkedin.com/in/jan-michalczik/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "jan-christopher.michalczik@tum-ai.com" - } - }, - { - id: "benedikt-wieser", - firstName: "Benedikt", - lastName: "Wieser", - role: "Strategy & Events", - description: "Having a background in Business Administration from the University of St. Gallen and studies at Berkeley, I’ve worked on multiple startup projects, in venture capital, at a scale-up, and participated in the AI E-Lab 2.0 startup incubator.\n\nAdditional to my professional experience, I learnt to lead teams in high-stress situations as an officer cadet in the Austrian Armed Forces, instilling in me strong personal drive and get-things-done thinking.\n\nBesides being passionate about entrepreneurship I love outdoor adventures like whitewater rafting and hiking, and always strive to explore and feel the intensity of life. I am absolutely looking forward to accompanying you on your individual, entrepreneurial journey. Let’s build something amazing together!", - imgSrc: "/assets/e-lab/team/benedikt_wieser.jpg", - imgAlt: "Benedikt Wieser", - socialMedia: { - linkedin: "https://www.linkedin.com/in/benedikt-wieser-6430a3139/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "" - } - }, - { - id: "emine-hakani", - firstName: "Emine", - lastName: "Hakani", - role: "Partners & Sponsors", - description: "", - imgSrc: "/assets/e-lab/team/emine_hakani.png", - imgAlt: "Emine Hakani", - socialMedia: { - linkedin: "https://www.linkedin.com/in/emine-hakani-muc/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "venture@tum-ai.com" - } - }, - { - id: "philip-juenemann", - firstName: "Philip", - lastName: "Jünemann", - role: "Talent & Community", - description: "Passionate about Entrepreneurship, Tech and AI!", - imgSrc: "/assets/e-lab/team/philip_juenemann.jpg", - imgAlt: "Philip Jünemann", - socialMedia: { - linkedin: "https://www.linkedin.com/in/philip-louis-j%C3%BCnemann/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "philip.juenemann@tum-ai.com" - } -}, - { - id: "david-reyes", - firstName: "David", - lastName: "Reyes", - role: "Talent & Community", - description: "Hey, nice to meet you! I am David, and I am passionate about empowering people to pursue their passions in life (which, of course, includes you). With a solid foundation in engineering and economics, I have gained extensive business and tech knowledge during my studies, with my journey spanning Latin America, the US, and now Europe. This diverse experience has led me through various tech startups, where I have held roles in product management and engineering teams. My past experiences encompass finance, product management, and data science, with AI currently being one of my key areas of interest.\n\n" + - "Innovation drives me, and I have found a fitting place within the Munich entrepreneurial ecosystem. I am dedicated to ensuring you become part of an amazing batch of smart, diverse, and driven individuals who are passionate about developing solutions and maintaining a thriving sense of community. I look forward to working together to take your startup idea to the moon.", - imgSrc: "/assets/e-lab/team/david_reyes.png", - imgAlt: "David Reyes", - socialMedia: { - linkedin: "https://www.linkedin.com/in/davidreyesj/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "david.reyes@tum-ai.com" - } -}, - { - id: "zaid-efraij", - firstName: "Zaid", - lastName: "Efraij", - role: "Events & Strategy", - description: "", - imgSrc: "/assets/e-lab/team/zaid_efraij.jpg", - imgAlt: "Zaid Efraij", - socialMedia: { - linkedin: "https://www.linkedin.com/in/zaid-efraij-b6630722a/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "zaid.efraij@tum-ai.com" - } - }, - { - id: "nagaharshith-makam-sreenivasulu", - firstName: "Nagaharshith", - lastName: "Makam Sreenivasulu", - role: "Marketing", - description: "Hey, I am Nagah. In addition to pursuing a bachelor's degree in Management and Technology at TUM, I also assist with marketing at TUM.ai and TEG e.V. (The Entrepreneurial Group, student startup club in Munich). With a background in business, I am interested in using AI agents to improve traditional business settings. Professionally, I work as a Business Development working student at roadsurfer GmbH.\n\nI am excited to meet you and help you with your AI startup journey!", - imgSrc: "/assets/e-lab/team/nagah_sreenivasulu.jpg", - imgAlt: "Nagah Sreenivasulu", - socialMedia: { - linkedin: "https://www.linkedin.com/in/nagaharshith", - x: "", - instagram: "", - youtube: "", - website: "", - email: "nagaharshith-makam.sreenivasulu@tum-ai.com" - } - }, -]; - -export const alumni: Person[] = [ - { - id: "abdulqadir-faruk", - firstName: "Abdulqadir", - lastName: "Faruk", - role: "Advisor", - description: "Abdul serves as an Advisor at TUM.ai, where he brings his experience and expertise in leadership, entrepreneurship, and venture development. He previously led the AI E-Lab as the Head of Venture alongside Daniil Morozov, where they envisioned and re-established the AI E-Lab as a straight-shooting startup sandbox and a genuine community designed to engineer serendipity among founders. Throughout the program, Abdul has been and will continue to be a humble sparring partner for our founders.", - imgSrc: "/assets/e-lab/team/abdul_faruk.jpg", - imgAlt: "Abdulqadir Faruk", - socialMedia: { - linkedin: "https://www.linkedin.com/in/abdulqadirfaruk/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "abdul.faruk@tum-ai.com", - } - }, - { - id: "daniil-morozov", - firstName: "Daniil", - lastName: "Morozov", - role: "Advisor", - description: "", - imgSrc: "/assets/e-lab/team/daniil_morozov.png", - imgAlt: "Daniil Morozov", - socialMedia: { - linkedin: "https://www.linkedin.com/in/daniil-morozov-912490252/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "", - } - }, - { - id: "nektarios-totikos", - firstName: "Nektarios", - lastName: "Totikos", - role: "Advisor", - description: "", - imgSrc: "/assets/e-lab/team/nektarios_totikos.jpeg", - imgAlt: "Nektarios Totikos", - socialMedia: { - linkedin: "https://www.linkedin.com/in/nektarios-totikos/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "", - } - }, - { - id: "ian-tolan", - firstName: "Ian", - lastName: "Tolan", - role: "Alumni", - description: "", - imgSrc: "/assets/e-lab/team/ian_tolan.png", - imgAlt: "Ian Tolan", - socialMedia: { - linkedin: "https://www.linkedin.com/in/ian-tolan-a85b0a107/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "", - } - }, - { - id: "david-podolskyi", - firstName: "David", - lastName: "Podolskyi", - role: "Alumni", - description: "", - imgSrc: "/assets/e-lab/team/david_podolskyi.png", - imgAlt: "David Podolskyi", - socialMedia: { - linkedin: "https://www.linkedin.com/in/davidpodolsky/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "", - } - }, - { - id: "luca-dombetzki", - firstName: "Luca", - lastName: "Dombetzki", - role: "Alumni", - description: "", - imgSrc: "/assets/e-lab/team/luca_dombetzki.png", - imgAlt: "Luca Dombetzki", - socialMedia: { - linkedin: "https://www.linkedin.com/in/luca-dombetzki/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "", - } - }, - { - id: "yarhy-flores", - firstName: "Yarhy", - lastName: "Flores", - role: "Alumni", - description: "", - imgSrc: "/assets/e-lab/team/yarhy_flores.png", - imgAlt: "Yarhy Flores", - socialMedia: { - linkedin: "https://www.linkedin.com/in/yarhy-flores/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "", - } - }, - { - id: "sebastian-wilhelm", - firstName: "Sebastian", - lastName: "Wilhelm", - role: "Alumni", - description: "", - imgSrc: "/assets/e-lab/team/sebastian_wilhelm.png", - imgAlt: "Sebastian Wilhelm", - socialMedia: { - linkedin: "https://www.linkedin.com/in/sebastian-wilhelm/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "", - } - }, - { - id: "can-kayalan", - firstName: "Can", - lastName: "Kayalan", - role: "Alumni", - description: "", - imgSrc: "/assets/e-lab/team/can_kayalan.png", - imgAlt: "Can Kayalan", - socialMedia: { - linkedin: "https://www.linkedin.com/in/can-kayalan/", - x: "", - instagram: "", - youtube: "", - website: "", - email: "", - } - }, -]; - -export const faq = [ - { - question: "I don’t feel experienced yet. Should I still apply?", - answer: - "Definitely. Our program is designed to equip you with all relevant knowledge and to make your founding experience as convenient as possible.", - }, - { - question: "Do I need to be enrolled at a university?", - answer: - "No. It doesn't matter whether you are are enrolled at TUM, LMU or a student in Munich at all. We want to make founding accessible to everyone and fair. Regardless of your background, we would like to help you with founding your AI startup. You only have to be present in Munich during the program.", - }, - { - question: "My idea is not AI related. Can I still apply?", - answer: - "Unfortunately, no. Your startup idea has to be related to artificial intelligence.", - }, - { - question: "When will the application phase begin?", - answer: - "The application phase will open probably around August 2024 again.", - }, - // { - // question: "When is the application deadline?", - // answer: "The application phase closes on 07.09.2023 at 23:59.", - // }, - { - question: "Can I apply with a team?", - answer: - "Yes, you can, we will consider your application then as a team application.", - }, - { - question: - "What if I don’t find a team during the first week of the AI E-Lab?", - answer: - "No worries, if you don’t find a team, you’ll still be able to continue your journey in the E-Lab.", - }, - { - question: "Do I have to be located in Munich during the program?", - answer: - "Since we organize in-person activities, participants need to be present in Munich during these activities.", - }, - { - question: "Am I legally bound to TUM.ai or a partner company?", - answer: - "No. We are equity-free and do not want a share in your startup. You only need to invest your dedication and eagerness and we would like to help you with your AI startup.", - }, - { - question: "What is the time commitment for this program?", - answer: - "The AI E-Lab is a part-time program. Keep in mind that the more you commit, the more you get out of this program.", - }, -]; diff --git a/data/industry.tsx b/data/industry.tsx deleted file mode 100644 index 0a0d6ec..0000000 --- a/data/industry.tsx +++ /dev/null @@ -1,271 +0,0 @@ -interface Partner { - href: string; - src: string; - alt: string; -} - -export const partners_ip4: Partner[] = [ - { - href: "https://www.atoss.com/de", - src: "/assets/industry/partners/IP4/ATOSS.png", - alt: "atoss", - }, - { - href: "https://www.hypovereinsbank.de", - src: "/assets/industry/partners/IP4/HVB_2.png", - alt: "hypovereinsbank", - }, - { - href: "https://www.infineon.com/cms/de/", - src: "/assets/industry/partners/IP4/infineon_logo.png", - alt: "infineon", - }, - { - href: "https://www.prosiebensat1.com", - src: "/assets/industry/partners/IP4/P7S1_transparent.png", - alt: "prosiebensat1", - }, - { - href: "https://www.sportortho.mri.tum.de", - src: "/assets/industry/partners/IP4/MRI.png", - alt: "MRI", - }, - { - href: "https://neuralprophet.com", - src: "/assets/industry/partners/IP4/neuralprophet_logo.png", - alt: "neuralprophet", - }, - { - href: "https://eyeo.com", - src: "/assets/industry/partners/IP4/eyeo.png", - alt: "eyeo", - }, - { - href: "https://gruppe.schwarz", - src: "/assets/industry/partners/IP4/schwarzgroup_edit_cropped.png", - alt: "Schwarz Gruppe", - }, - { - href: "https://www.rohde-schwarz.com/de", - src: "/assets/industry/partners/IP4/RandS.svg.png", - alt: "Rhode-Schwarz", - }, -]; - -export const partners_ip5: Partner[] = [ - { - href: "https://www.airbus.com/en", - src: "/assets/industry/partners/IP5/1200px-Airbus_logo_2017.png", - alt: "Airbus", - }, - { - href: "https://www.burda.com/en/", - src: "/assets/industry/partners/IP5/Hubert_Burda_Media_Logo.png", - alt: "Burda", - }, - { - href: "https://www.hypovereinsbank.de/hvb/privatkunden", - src: "/assets/industry/partners/IP5/Logo-Case-HypoVereinsbank-1240x870px.svg", - alt: "HVB", - }, - { - href: "https://www.mri.tum.de", - src: "/assets/industry/partners/IP5/2560px-Klinikum_rechts_der_Isar_logo.svg.png", - alt: "MRI", - }, - { - href: "https://www.recogni.com", - src: "/assets/industry/partners/IP5/Recogni_Logo.jpg.webp", - alt: "Recogni", - }, - { - href: "https://company.rtl.com/en/homepage/", - src: "/assets/industry/partners/IP5/RTL.png", - alt: "RTL", - }, - { - href: "https://www.go-turtle.com", - src: "/assets/industry/partners/IP5/TURTLE_Logo_Claim.067bf3dd46c5285ea24fb1b3e0904721.svg", - alt: "Turtle", - }, -]; - -interface Link { - url: string; - displayText: string; -} - -interface Project { - title: string; - image: string; - description: [{ text: string; link?: Link[]; moreText?: string }]; - organization: string; - organizationLink: string; - time: string; -} - -export const projects: Project[] = [ - { - title: "Recogni - ML on Custom Hardware", - image: "/assets/industry/project_cards/recogni_white_bg.png", - description: [ - { - text: "Recogni is building a custom chip for perception in autonomous driving. In this project, the team will work on bringing a set of state of the art models to Recogni’s custom hardware.", - }, - ], - organization: "Recogni", - organizationLink: "https://www.recogni.com", - time: "spring 2023", - }, - { - title: "Airbus - Big Data Analysis Framework", - image: "/assets/industry/project_cards/airbus_white_bg.png", - description: [ - { - text: "Building a dynamic mission simulator for the Airbus Aircraft-as-a-Sensor initiative. This simulator will help Airbus to explore and simulate a wide range of Aircraft-as-a-Sensor opportunities. ", - }, - ], - organization: "Airbus", - organizationLink: "https://www.airbus.com/en", - time: "spring 2023", - }, - { - title: "Roland Berger - Cloud-based Data Processing", - image: "/assets/industry/project_cards/rolandberger_industry.png", - description: [ - { - text: "Implementation of cloud-based web services, containing NLP Machine Learning models -", - link: [ - { - url: "https://www.linkedin.com/in/stefanrmmr/", - displayText: "Stefan Rummer", - }, - { - url: "https://www.linkedin.com/in/robin-mittas-a29a11201/", - displayText: "Robin Mittas", - }, - { - url: "https://www.linkedin.com/in/vtq/", - displayText: "Tuan-Quang Vuong", - }, - ], - moreText: - "built scalable APIs that were deployed to production globally. These enabled Roland Berger to automatically enrich their CRM systems with financial market insights and LinkedIn company data.", - }, - ], - organization: "Roland Berger", - organizationLink: "https://www.rolandberger.com/de/", - time: "fall 2022", - }, - { - title: "QuantCo - Virtual Biopsy", - image: "/assets/industry/project_cards/quantco.jpeg", - description: [ - { - text: "4x stellar students supported QuantCo in their mission to revolutionize the way prostate cancer is detected leveraging ML-based virtual biopsy.", - link: [ - { - url: "https://www.linkedin.com/in/richardgaus/", - displayText: "Richard Gaus", - }, - { - url: "https://www.linkedin.com/in/cedrik-laue-770682203/", - displayText: "Cedrik Laue", - }, - ], - moreText: - "Implemented algorithms for medical image processing, ranging from pre-processing, registration, all the way to the segmentation of MRI data.", - }, - ], - organization: "QuantCo", - organizationLink: "https://quantco.com/", - time: "fall 2022", - }, - { - title: "TUM MRI Radiology - Klinikum Rechts der Isar", - image: "/assets/industry/project_cards/radiologie.png", - description: [ - { - text: "The Institute for Diagnostic and Interventional Radiology performs and evaluates examinations using ultrasound, conventional X-ray technology, CT and MRI. Project participants collaborated with radiologists to learn about the specifics of medical imaging formats (such as DICOM) and the basics of medical knowledge required for the task.", - // Update with links and moreText when more details available - }, - ], - organization: "TUM MRI", - organizationLink: "https://www.mri.tum.de/", // Update if there's an actual link - time: "fall 2022", // Update if there's an actual date - }, - { - title: "TURTLE - Maritime Matchmaking", - image: "/assets/industry/project_cards/seafarer.png", - description: [ - { - text: "TURTLE empowers seafarers and enables a digital, efficient, and compliant market free from corruption and other illegal and immoral activities. We joined a team of industry professionals building a global online job marketplace that connects ship owners and seafarers directly, work in a fast-growing startup and with strong social impact!", - }, - ], - organization: "TURTLE", - organizationLink: - "https://www.linkedin.com/company/turtle-gmbh/?originalSubdomain=de", - time: "spring 2022", - }, - { - title: "Leevi Health - Baby Health Monitoring", - image: "/assets/industry/project_cards/leevi_baby.png", - description: [ - { - text: "During this project we contributed to Leevi's mission of providing digital health solutions for infants. Leevi helps parents accurately understand the wellbeing of their babies through individual insights via a wearable bracelet that collects the babies vital and sleep parameters.", - }, - ], - organization: "Leevi", - organizationLink: "https://leevi-health.com/", - time: "spring 2022", - }, - { - title: "Cognote.ai - Medical Speech Recognition", - image: "/assets/industry/project_cards/prev_cognote.png", - description: [ - { - text: "During this AI project, our team worked broadly on conversational speech recognition technology for the medical domain. This involved the assembly of a German speech dataset, training (and/or fine-tuning) large modern speech models on our compute infrastructure and evaluating their effectiveness relative to current cloud offerings.", - }, - ], - organization: "Cognote", - organizationLink: "https://www.cognote.ai/", - time: "spring 2022", - }, - { - title: "Presize.ai - Clothing size recommender systems", - image: "/assets/industry/project_cards/presize_resize.jpg", - description: [ - { - text: "We created a recommender system for clothing sizes and benchmarked it against Presize’s own technology. This way we actively contributed of Presize's s vision of reducing the amount of paercel-returns.", - }, - ], - organization: "presize.ai", - organizationLink: "https://www.presize.ai/", - time: "fall 2021", - }, - { - title: "Heimkapital - Real estate price prediction", - image: "/assets/industry/project_cards/heimkapital_resized.jpg", - description: [ - { - text: "We developed solutions to make an impact on the financial independence of homeowners by implementing an AI that can predict real estate prices based on population data.", - }, - ], - organization: "Heimkapital", - organizationLink: - "https://www.heimkapital.de/?gclid=Cj0KCQjwqKuKBhCxARIsACf4XuFcI2JnKY0mJUc5_abF6uqJlJyi1Uqi291fM6qQD6V0WSy3aKzhFGMaArIQEALw_wcB", - time: "fall 2021", - }, - { - title: "DynaGroup & Veritas PR - NLP paraphrasing", - image: "/assets/industry/project_cards/dyna_group_resize.jpg", - description: [ - { - text: "We created an NLP-based system that can paraphrase sequences of text while reliably preserving the meaning - making online content creation easier and less-time consuming for smaller companies and non-profits.", - }, - ], - organization: "DynaGroup", - organizationLink: "https://www.dynagroup.de/", - time: "fall 2021", - }, -]; diff --git a/data/partners.tsx b/data/partners.tsx deleted file mode 100644 index d7e0d3a..0000000 --- a/data/partners.tsx +++ /dev/null @@ -1,355 +0,0 @@ -import { partners_ip4, partners_ip5 } from "./industry"; - -export const partners_collabrated_with = [ - { - href: "https://unite.eu/de-de", - src: "/assets/partners_sponsors/Unite_logo.png", - alt: "Unite", - }, - { - href: "https://www.microsoft.com/de-de/about", - src: "/assets/partners_sponsors/Microsoft_Logo.png", - alt: "Microsoft", - }, - { - href: "https://www.ibm.com/de-de", - src: "/assets/partners_sponsors/ibm_logo.png", - alt: "IBM", - }, - { - href: "https://www.appliedai.de/de/", - src: "/assets/partners_sponsors/appliedai_logo.png", - alt: "Applied AI", - }, - { - href: "https://www.unternehmertum.de/", - src: "/assets/partners_sponsors/UnternehmerTUM.webp", - alt: "UnternehmerTUM", - }, - { - href: "https://www2.deloitte.com/de/de/pages/risk/solutions/aistudio.html", - src: "/assets/partners_sponsors/deloitte.png", - alt: "Deloitte", - }, - { - href: "https://www.bcg.com/beyond-consulting/bcg-gamma/overview", - src: "/assets/partners_sponsors/bcggamma_logo.png", - alt: "BCG Gamma", - }, - { - href: "https://about.google/", - src: "/assets/partners_sponsors/google_logo.png", - alt: "Google", - }, - { - href: "https://openai.com/", - src: "/assets/partners_sponsors/openai_logo.png", - alt: "OpenAI", - }, - { - href: "https://www.netapp.com/de/", - src: "/assets/partners_sponsors/NetApp_logo.png", - alt: "NetApp", - }, - { - href: "https://www.siemens.com/de/de.html", - src: "/assets/partners_sponsors/siemens-logo-default.svg", - alt: "Siemens", - }, - { - href: "https://ryver.ai/", - src: "/assets/partners_sponsors/ryverai.png", - alt: "Ryver AI", - }, - { - href: "https://www.10xfounders.com/", - src: "/assets/partners_sponsors/10xfounderslogo.png", - alt: "10x Founders", - }, - { - href: "https://www.tngtech.com/index.html", - src: "/assets/partners_sponsors/TNG_logo.png", - alt: "TNG Tech", - }, - { - href: "https://www.infineon.com/", - src: "/assets/partners_sponsors/infineon_logo.png", - alt: "Infineon", - }, - { - href: "https://www.rolandberger.com/de/", - src: "/assets/partners_sponsors/rolandberger_logo.png", - alt: "Roland Berger", - }, - { - href: "https://quantco.com/", - src: "/assets/partners_sponsors/quantco_logo.png", - alt: "QuantCo", - }, - { - href: "https://www.aleph-alpha.com/", - src: "/assets/partners_sponsors/alephalpha.png", - alt: "Aleph Alpha", - }, - { - href: "https://www.cherry.vc/", - src: "/assets/partners_sponsors/cherryVC.png", - alt: "Cherry VC", - }, - { - href: "https://www.speedinvest.com/", - src: "/assets/partners_sponsors/speedinvest.png", - alt: "Speedinvest", - }, - { - href: "https://earlybird.com/", - src: "/assets/partners_sponsors/earlybirdvc.png", - alt: "Earlybird VC", - }, - { - href: "https://www.etventure.de/ey/", - src: "/assets/partners_sponsors/EYetventure.png", - alt: "EY Etventure", - }, - { - href: "https://jina.ai/", - src: "/assets/partners_sponsors/jina_ico.png", - alt: "Jina AI", - }, - { - href: "https://wandb.ai/site", - src: "/assets/partners_sponsors/wandb_logo.png", - alt: "Weights and Biases", - }, - { - href: "https://www.mri.tum.de/", - src: "/assets/partners_sponsors/Klinikum_rechts_der_Isar_logo.svg", - alt: "Klinikum Rechts der Isar", - }, - { - href: "https://www.avimedical.com/", - src: "/assets/partners_sponsors/avi_medical_logo.png", - alt: "Avi Medical", - }, -]; - -export const initiatives_collabrated_with = [ - { - href: "https://www.cdtm.de/", - src: "/assets/partners_sponsors/cdtm_logo.png", - alt: "CDTM", - }, - { - href: "https://www.linkedin.com/company/entreprenow-community/", - src: "/assets/partners_sponsors/entreprenow.jpg", - alt: "EntrepreNow Community", - }, - { - href: "https://www.startmunich.de/", - src: "/assets/partners_sponsors/start_munich.png", - alt: "Start Munich", - }, - { - href: "https://www.linkedin.com/company/knust-coe-ic/about/", - src: "/assets/partners_sponsors/knust_innovationcentre.jpg", - alt: "Knust CoE IC", - }, - { - href: "https://gdsc.community.dev/technical-university-of-munich/", - src: "/assets/partners_sponsors/gdsc.png", - alt: "GDSC", - }, - { - href: "https://analytics-club.org/wordpress/", - src: "/assets/partners_sponsors/eth_ac.jpg", - alt: "ETH Analytics Club", - }, - { - href: "https://q-summit.com", - src: "/assets/partners_sponsors/qsummit.png", - alt: "QSummit", - }, - { - href: "https://enactus-muenchen.de/", - src: "/assets/partners_sponsors/enactus.jpg", - alt: "Enactus Munich", - }, - { - href: "https://www.linkedin.com/company/initiatives-for-humanity/", - src: "/assets/partners_sponsors/initiatives_fh.jpg", - alt: "Initiatives for Humanity", - }, - { - href: "https://www.mcml.ai", - src: "/assets/partners_sponsors/MCML_Logo_2.png", - alt: "MCML", - }, -]; - -export const strategic_partnerts = [ - { - href: "https://www.nvidia.com", - src: "/assets/partners/strategic_partners/Nvidia_(logo).svg.png", - alt: "nvidia", - width: 130, - }, - { - href: "https://baiosphere.org", - src: "/assets/partners/strategic_partners/baiosphere_logo-1-1.png", - alt: "baiosphere", - }, - { - href: "https://www.appliedai.de/de/", - src: "/assets/partners_sponsors/appliedai_logo.png", - alt: "Applied AI", - }, - { - href: "https://www.tum-venture-labs.de", - src: "/assets/partners/strategic_partners/TUMVentureLabs.jpg", - alt: "TumVentureLabs", - }, -]; - -export const enablers_supporters = [ - { - href: "https://www.janestreet.com", - src: "/assets/partners/enablers_and_supporters/120px-Jane_Street_Capital_Logo.svg.png", - alt: "janestreet", - }, - { - href: "https://www.mcml.ai", - src: "/assets/partners_sponsors/MCML_Logo_2.png", - alt: "MCML", - }, - { - href: "https://www.tngtech.com/index.html", - src: "/assets/partners_sponsors/TNG_logo.png", - alt: "TNG Tech", - }, - { - href: "https://campusfounders.de/de/", - src: "/assets/partners/enablers_and_supporters/campus_founders.png", - alt: "campusfounders", - width: 120, - }, - { - href: "https://www.merantix.com/", - src: "/assets/partners/enablers_and_supporters/merantix_black.svg", - alt: "Merantix", - }, - { - href: "https://www.cdtm.de/", - src: "/assets/partners_sponsors/cdtm_logo.png", - alt: "CDTM", - width: 120, - }, - { - href: "https://www.stmd.bayern.de", - src: "/assets/partners/enablers_and_supporters/StMD_logo_grey.svg", - alt: "ministry_for_digital_affairs", - }, - { - href: "https://www.10xfounders.com/", - src: "/assets/partners_sponsors/10xfounderslogo.png", - alt: "10x Founders", - }, - { - href: "https://www.burda.com/", - src: "/assets/partners/enablers_and_supporters/Hubert_Burda_Media_2013_logo.svg.png", - alt: "HubertBurda", - }, - { - href: "https://kipark.de", - src: "/assets/partners/enablers_and_supporters/KIPark.png", - alt: "KIPark", - }, - { - href: "https://www.startmunich.de/", - src: "/assets/partners_sponsors/start_munich.png", - alt: "Start Munich", - }, - { - href: "https://www.aimunich.com", - src: "/assets/partners/enablers_and_supporters/ai+munich.jpeg", - alt: "ai+munich", - }, -]; - -export const project_partners = [ - { - href: "https://www.esa.int", - src: "/assets/partners/project_partners/1ESA_logo.svg.png", - alt: "ESA", - }, - { - href: "https://www.gresearch.com", - src: "/assets/partners/project_partners/gresearch-logo.png", - alt: "GResearch", - width: 100, - }, - { - href: "https://www.bmw.com", - src: "/assets/partners/project_partners/bmw-7.svg", - alt: "BMW", - width: 100, - }, - { - href: "https://cohere.com", - src: "/assets/partners/project_partners/cohere_logo.svg", - alt: "Cohere", - }, - { - href: "https://dai.ki", - src: "/assets/partners/project_partners/daiki.png", - alt: "Daiki", - }, - { - href: "https://www.genistat.ch/en/", - src: "/assets/partners/project_partners/Genistat_Logo.png", - alt: "Genistat", - }, - { - href: "https://www.microsoft.com/de-de/about", - src: "/assets/partners_sponsors/Microsoft_Logo.png", - alt: "Microsoft", - }, - - { - href: "https://www.burda-forward.de", - src: "/assets/partners/project_partners/burdaforward-logo.svg", - alt: "BurdaForward", - }, - { - href: "https://www.unicreditgroup.eu/", - src: "/assets/partners/project_partners/UniCredit_(logo).svg.png", - alt: "UniCredit", - }, - { - href: "https://www.ibm.com/de-de", - src: "/assets/partners_sponsors/ibm_logo.png", - alt: "IBM", - }, - { - href: "https://www.roche.com", - src: "/assets/partners/project_partners/Rochee.png", - alt: "Roche", - }, - { - href: "https://www.muenchen.de", - src: "/assets/partners/project_partners/muenchen.png", - alt: "LandeshauptstadtMünchen", - }, - { - href: "https://quantco.com/", - src: "/assets/partners_sponsors/quantco_logo.png", - alt: "QuantCo", - }, - { - href: "https://www.avimedical.com/", - src: "/assets/partners_sponsors/avi_medical_logo.png", - alt: "Avi Medical", - }, -] - .concat(partners_ip4) - .concat(partners_ip5) - .filter((element) => element.alt != "HVB"); diff --git a/lib/db.ts b/lib/db.ts new file mode 100644 index 0000000..93ccb1d --- /dev/null +++ b/lib/db.ts @@ -0,0 +1,15 @@ +import { PrismaClient } from '@prisma/client' + +const prismaClientSingleton = () => { + return new PrismaClient() +} + +declare const globalThis: { + prismaGlobal: ReturnType; +} & typeof global; + +const prisma = globalThis.prismaGlobal ?? prismaClientSingleton() + +export default prisma + +if (process.env.NODE_ENV !== 'production') globalThis.prismaGlobal = prisma \ No newline at end of file diff --git a/lib/utils.ts b/lib/utils.ts index d084cca..5780aaa 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -1,6 +1,30 @@ import { type ClassValue, clsx } from "clsx" import { twMerge } from "tailwind-merge" +import { + faBullhorn, + faCode, + faFileContract, + faGraduationCap, + faHandshakeSimple, + faIndustry, + faLaptop, + faRocket, + faUserGroup, + IconDefinition, +} from '@fortawesome/free-solid-svg-icons' export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } + +export const iconMap: Record = { + faBullhorn, + faCode, + faFileContract, + faGraduationCap, + faHandshakeSimple, + faIndustry, + faLaptop, + faRocket, + faUserGroup, +}; \ No newline at end of file diff --git a/package.json b/package.json index c1fe1f7..d5242fd 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,11 @@ "build": "next build", "start": "next start", "lint": "next lint", - "format": "prettier --write ." + "format": "prettier --write .", + "postinstall": "prisma generate && prisma migrate deploy" + }, + "prisma": { + "seed": "ts-node --compiler-options {\"module\":\"CommonJS\"} prisma/seed.ts" }, "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.5.2", @@ -16,6 +20,7 @@ "@fortawesome/react-fontawesome": "^0.2.2", "@hookform/resolvers": "^3.3.2", "@notionhq/client": "^2.2.5", + "@prisma/client": "^5.20.0", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-dialog": "^1.0.4", "@radix-ui/react-slot": "^1.0.2", @@ -38,6 +43,7 @@ "framer-motion": "^10.12.16", "lucide-react": "^0.445.0", "next": "latest", + "prisma": "^5.20.0", "react": "18.2.0", "react-dom": "18.2.0", "react-hook-form": "^7.49.2", @@ -45,6 +51,7 @@ "sharp": "^0.33.2", "tailwind-merge": "^2.5.2", "three": "^0.153.0", + "ts-node": "^10.9.2", "typescript": "^4.9.4", "zod": "^3.22.4" }, diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..f03a2bc --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,119 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "sqlite" + url = env("DATABASE_URL") +} + +model Department { + id String @id @default(cuid()) + name String + description String + image String + icon String +} + +model Testimonial { + id String @id @default(cuid()) + imgSrc String + name String + text String + logoSrc String + logoAlt String + link String + company String +} + +model FAQ { + id String @id @default(cuid()) + question String + answer String + type String +} + +model Person { + id String @id + firstName String + lastName String + role String? + description String? + imgSrc String? + imgAlt String? + linkedin String? + x String? + instagram String? + youtube String? + website String? + email String? + type String + startups Startup[] @relation("StartupFounders") +} + +model Startup { + id String @id + name String + description String + website String + logo String + about String? + tag String? + batch String? + industry String + linkedin String? + x String? + instagram String? + youtube String? + email String? + jobs Job[] + latestNews LatestNews[] + metrics Metric[] + founders Person[] @relation("StartupFounders") +} + +model Job { + id String @id @default(cuid()) + startupId String + name String + location String + salary String + experience String + startup Startup @relation(fields: [startupId], references: [id]) +} + +model LatestNews { + id String @id @default(cuid()) + startupId String + message String + link String + date DateTime + startup Startup @relation(fields: [startupId], references: [id]) +} + +model Metric { + id String @id @default(cuid()) + startupId String + key String + value String + startup Startup @relation(fields: [startupId], references: [id]) +} + +model Partner { + id String @id @default(cuid()) + href String + src String + alt String + width Int? + type String +} + +model Project { + id String @id @default(cuid()) + title String + image String + description String + organization String + organizationLink String + time String +} diff --git a/prisma/seed.ts b/prisma/seed.ts new file mode 100644 index 0000000..b5bd5d3 --- /dev/null +++ b/prisma/seed.ts @@ -0,0 +1,1174 @@ +import { PrismaClient } from '@prisma/client'; + +const prisma = new PrismaClient(); + +async function main() { + await prisma.department.createMany({ + data: [ + { + name: "Makeathon", + description: + "Organizing the largest Makeathon in Munich, a virtual 48-hour challenge where you develop a real-world business case involving AI. We will provide helpful workshops and insightful business talks, as well as assistance from mentors and industry experts.", + image: "/assets/departments/makeathon.png", + icon: "faLaptop", + }, + { + name: "Venture", + description: + "The Venture department is mainly focused on bridging the gap between ideas and building the next successful AI startups. We are dedicated to fostering innovation and an entrepreneurial spirit among all TUM.ai members!", + image: "/assets/departments/venture.jpg", + icon: "faRocket", + }, + { + name: "Industry", + description: + "The Industry Team provides project opportunities with industry partners during the lecture-free period. We help TUM.ai members to apply AI in real world company challenges - bridging the gap between theory and practice.", + image: "/assets/departments/industry.png", + icon: "faIndustry", + }, + { + name: "Education", + description: + "The Education department educates TUM.ai members and the public about AI in all possible domains. We are responsible for creating educational content, organize educational events and spread knowledge - from beginner to expert level.", + image: "/assets/departments/education.jpg", + icon: "faGraduationCap", + }, + { + name: "Software dev", + description: + "The Software Development Department (DEV) is crucial for running the group TUM.ai in an efficient, modern and collaborative way. It is responsible for implementing in-house software tools, cloud services and the initiative's SaaS infrastructure.", + image: "/assets/departments/software_dev.jpg", + icon: "faCode", + }, + { + name: "Legal & Finance", + description: + "The Legal & Finance Department is responsible for making sure that TUM.ai acts accordingly to all relevant laws. In regard to that, one of our main tasks is to account for all incoming and outgoing capital streams to ensure that TUM.ai keeps its non-profit status.", + image: "/assets/departments/legal_and_finance.jpg", + icon: "faFileContract", + }, + { + name: "Community", + description: + "The people are the biggest asset of any organization! Even more so in student initiatives, the community is the driving force behind the overall success of the initiative. Therefore, the community department manages gatherings, buddy events and the overall recruitment process.", + image: "/assets/departments/community.png", + icon: "faUserGroup", + }, + { + name: "Marketing & PR", + description: + "The marketing department is about promoting the vision and mission of TUM.ai, serving as the face of our community, coordinating and producing all materials representing TUM.ai. Reaching out to create an overarching image that represents our initiative in a positive light.", + image: "/assets/departments/marketing_and_pr.jpg", + icon: "faBullhorn", + }, + { + name: "Partners & Sponsors", + description: + "We make sure that we cooperate with the most awesome partners and sponsors and thereby strengthen the TUM.AI network. Our partner- and sponsorships are the basis for creating ambitious events and project collaborations. ", + image: "/assets/departments/partners_and_sponsors.jpg", + icon: "faHandshakeSimple", + }, + ], + }); + + await prisma.testimonial.createMany({ + data: [ + { + imgSrc: "/assets/e-lab/testimonials/ikigai_team.png", + name: "Team ikigai", + text: 'The AI E Lab was one of the few "non-bullshit" sources during our journey. It was a sandbox full of other really cool people truly wanting to challenge themselves and their idea. Through those interactions could we understand our own business better, share insights and give back to the community and feel like every single one of the people there will walk out of the AI E Lab with a new perspective!', + logoSrc: "/assets/e-lab/testimonials/ikigai.png", + logoAlt: "ikigai", + link: "https://www.linkedin.com/company/get-ikigai/", + company: "https://www.get-ikigai.com/" + }, + { + imgSrc: "/assets/e-lab/testimonials/florian_scherl.jpg", + name: "Florian Scherl", + text: "I really loved the abundance of pitch events. It not only immensely improved my pitching but I also received priceless feedback for my idea and even found my NLP team lead at the final pitch. I definitely recommend applying to the AI E-Lab and using the provided knowledge and resources to the fullest. They offer great advice and guidance. Lastly, I greatly appreciated the peer-to-peer exchange. They absolutely brought the brightest minds together to start new thriving ventures.", + logoSrc: "/assets/e-lab/testimonials/fast_ai_movies.png", + logoAlt: "FAST AI Movies", + link: "https://www.linkedin.com/in/florian-scherl/", + company: "https://fast-ai-movies.de/" + }, + { + imgSrc: "/assets/e-lab/testimonials/tom_doerr.jpeg", + name: "Tom Dörr", + text: "I gained real, usable insights into the world of start-ups, including the ins and outs of fundraising. The feedback of others added layers to my understanding and helped refine my ideas. The interactive nature of the sessions, were great, the one on product-market fit really stood out for me. One of the best parts was connecting with people who share a passion for AI. Working on projects with them has been a unique and rewarding experience.", + logoSrc: "/assets/e-lab/testimonials/conic_w.png", + logoAlt: "conic", + link: "https://www.linkedin.com/in/tom-d%C3%B6rr-912607126/", + company: "https://github.com/tom-doerr" + }, + { + imgSrc: "/assets/e-lab/testimonials/marc_alexander_kuehn.jpg", + name: "Marc Alexander Kühn (Jury)", + text: "Participating in AI E-Lab's final pitch event as a jury member was an enriching experience. It was great to see so many young people driving change in Artificial Intelligence. Also, it was thrilling to see some of the teams making significant progress after the incubation program. Above all, I believe what TUM.ai E-Lab is doing for the Munich ecosystem is of significant value. They're cultivating a vibrant environment for young, talented students and graduates to kick-start their entrepreneurial journey. Their dedication to unleashing the future of AI innovation in Munich is remarkable and I'm excited to see where their efforts will lead.", + logoSrc: "/assets/e-lab/partners/uvc_w.svg", + logoAlt: "UVC Partners", + link: "https://www.linkedin.com/in/marc-alexander-kuehn/", + company: "https://www.uvcpartners.com/" + }, + { + imgSrc: "/assets/e-lab/testimonials/maximilian_jesch.png", + name: "Maximilian Jesch (Jury)", + text: "Being a jury member at the AI Startup Contest was an exhilarating experience! The passion and innovation displayed by the participating teams left me truly impressed. Their groundbreaking ideas and impeccably delivered pitches showcased the immense potential of the next generation of AI-driven entrepreneurship. I have no doubt that these teams are on the cusp of revolutionizing the industry and driving us into an exciting AI-powered future. It's an honor to be part of their journey, and I eagerly anticipate witnessing their continued success and impact on the world.", + logoSrc: "", + logoAlt: "", + link: "https://www.linkedin.com/in/maximilian-jesch/", + company: "" + }, + + // { + // imgSrc: "/assets/e-lab/testimonials/leon_hergert.jpeg", + // name: "Leon Hergert", + // text: "As the co-founder of Spherecast, a software solution for e-commerce brands addressing stock imbalances with advanced machine learning, our journey began with the AI E-Lab program. Beyond just the network, the AI E-Lab's mentorship was instrumental. Our mentor, a seasoned e-commerce entrepreneur, continues to provide invaluable guidance and challenge us. If AI and startups excite you, whether you have an idea or seek co-founders, the AI E-Lab is the ideal platform.", + // logoSrc: "/assets/e-lab/testimonials/spherecast_ls.png", + // logoAlt: "spherecast", + // }, + // { + ], + }); + + await prisma.fAQ.createMany({ + data: [ + { + question: "I don’t feel experienced yet. Should I still apply?", + answer: + "Definitely. Our program is designed to equip you with all relevant knowledge and to make your founding experience as convenient as possible.", + type: "elab", + }, + { + question: "Do I need to be enrolled at a university?", + answer: + "No. It doesn't matter whether you are are enrolled at TUM, LMU or a student in Munich at all. We want to make founding accessible to everyone and fair. Regardless of your background, we would like to help you with founding your AI startup. You only have to be present in Munich during the program.", + type: "elab", + }, + { + question: "My idea is not AI related. Can I still apply?", + answer: + "Unfortunately, no. Your startup idea has to be related to artificial intelligence.", + type: "elab", + }, + { + question: "When will the application phase begin?", + answer: + "The application phase will open probably around August 2024 again.", + type: "elab", + }, + // { + // question: "When is the application deadline?", + // answer: "The application phase closes on 07.09.2023 at 23:59.", + // }, + { + question: "Can I apply with a team?", + answer: + "Yes, you can, we will consider your application then as a team application.", + type: "elab", + }, + { + question: + "What if I don’t find a team during the first week of the AI E-Lab?", + answer: + "No worries, if you don’t find a team, you’ll still be able to continue your journey in the E-Lab.", + type: "elab", + }, + { + question: "Do I have to be located in Munich during the program?", + answer: + "Since we organize in-person activities, participants need to be present in Munich during these activities.", + type: "elab", + }, + { + question: "Am I legally bound to TUM.ai or a partner company?", + answer: + "No. We are equity-free and do not want a share in your startup. You only need to invest your dedication and eagerness and we would like to help you with your AI startup.", + type: "elab", + }, + { + question: "What is the time commitment for this program?", + answer: + "The AI E-Lab is a part-time program. Keep in mind that the more you commit, the more you get out of this program.", + type: "elab", + }, + ], + }); + + //elab-team + await prisma.person.createMany({ + data: [ + { + id: "laurenz-sommerlad", + firstName: "Laurenz", + lastName: "Sommerlad", + role: "Head of Venture", + description: "Hey, I am Laurenz and lead the amazing team behind the AI E-LAB. My journey began at a young age, building my first software projects at 12 and founding a student-led startup at 15. These early experiences paved the way for my burning passion in AI, Robotics and Entrepreneurship.\n\n" + + "Here is a quick overview of my academic achievements and work:\n\n" + + "- Ranked in the Top 2% at TUM Department of Computer Science and achieved an Abitur GPA of 1.0\n" + + "- Conducting research at LMU Hospital to predict rare child diseases using federated learning-based Graph ML techniques on patient phenotypes, genes, and proteins\n" + + "- Developing perception and path planning software for an Autonomous Mars Rover participating in International Rover Competitions with WARR Space Robotics, while also leading Partner & Sponsors | PR & Marketing subteams \n" + + "- Over 2+ years of work experience as a Software Engineer in Full-Stack web-based applications (working student)\n\n" + + "Outside of my professional endeavors, I enjoy doing a lot of different sports like weight training, martial arts (Wing Chun), marathons, technical and cave diving, wakeboarding, snowboarding, and preparing for my first Ironman. I am also in love with traveling, exploring foreign cultures and learning languages including French, Spanish, Japanese & Arabic which continues to enrich my life.\n\n" + + "Driven by a desire to make the world a better place, I am committed to solving the most challenging problems with technology. Feel free to reach out — I am always up for a coffee and a good conversation! ☕", + imgSrc: "/assets/e-lab/team/laurenz_sommerlad.jpg", + imgAlt: "Laurenz Sommerlad", + linkedin: "https://www.linkedin.com/in/laurenzsommerlad/", + x: "https://x.com/Lauros_World", + instagram: "https://www.instagram.com/laurenzsommerlad/", + youtube: "https://www.youtube.com/@LaurenzSommerlad", + website: "https://laurenzsommerlad.com", + email: "laurenz.sommerlad@tum-ai.com", + type: "elab-team" + }, + { + id: "jan-christopher-michalczik", + firstName: "Jan-Christopher", + lastName: "Michalczik", + role: "Strategy & Events", + description: "Hey, nice to meet you! During the course of my studies, I have had the chance to gather some business acumen across different B-Schools. Starting with traditional subjects like finance and accounting, I have continually expanded my horizon to areas more strongly focused on innovation and technology management. Herein, my focus currently lies on but is not limited to AI. My journey has taken me across different countries and industries like the financial sector, shipping, and fruits wholesale.\n\n" + + "More importantly, I have had the chance to get immersed in two European innovation hubs: Paris and Munich. The German capital of beer and Weißwurst specifically caught my attention due to its proximity between tech and business which is hard to find elsewhere at the same scale. In the two years since I stepped my foot into the city, it has done everything else but disappointed. So, I am looking very forward to learning how you are contributing to this awesome vibe!\n\n" + + "Whatever your challenge is, I am here to help you solve it. I cannot wait to brainstorm with you or connect you to one of the numerous experts that TUM.ai will get you access to. From organizing last year's E-Lab, I can tell you that our participants, organizers, and partners made it a blast. So, get your act together, handle your responsibilities, and make sure you set aside some time for this program. It is worth it!\n\n"+ + "If you need more info than is presented on our website, sign up for our newsletter, go to one of our info events, or just reach out directly.", + imgSrc: "/assets/e-lab/team/jan_michalczik.png", + imgAlt: "Jan-Christopher Michalczik", + linkedin: "https://www.linkedin.com/in/jan-michalczik/", + email: "jan-christopher.michalczik@tum-ai.com", + type: "elab-team" + }, + { + id: "benedikt-wieser", + firstName: "Benedikt", + lastName: "Wieser", + role: "Strategy & Events", + description: "Having a background in Business Administration from the University of St. Gallen and studies at Berkeley, I’ve worked on multiple startup projects, in venture capital, at a scale-up, and participated in the AI E-Lab 2.0 startup incubator.\n\nAdditional to my professional experience, I learnt to lead teams in high-stress situations as an officer cadet in the Austrian Armed Forces, instilling in me strong personal drive and get-things-done thinking.\n\nBesides being passionate about entrepreneurship I love outdoor adventures like whitewater rafting and hiking, and always strive to explore and feel the intensity of life. I am absolutely looking forward to accompanying you on your individual, entrepreneurial journey. Let’s build something amazing together!", + imgSrc: "/assets/e-lab/team/benedikt_wieser.jpg", + imgAlt: "Benedikt Wieser", + linkedin: "https://www.linkedin.com/in/benedikt-wieser-6430a3139/", + type: "elab-team" + }, + { + id: "emine-hakani", + firstName: "Emine", + lastName: "Hakani", + role: "Partners & Sponsors", + description: "", + imgSrc: "/assets/e-lab/team/emine_hakani.png", + imgAlt: "Emine Hakani", + linkedin: "https://www.linkedin.com/in/emine-hakani-muc/", + email: "venture@tum-ai.com", + type: "elab-team" + }, + { + id: "philip-juenemann", + firstName: "Philip", + lastName: "Jünemann", + role: "Talent & Community", + description: "Passionate about Entrepreneurship, Tech and AI!", + imgSrc: "/assets/e-lab/team/philip_juenemann.jpg", + imgAlt: "Philip Jünemann", + linkedin: "https://www.linkedin.com/in/philip-louis-j%C3%BCnemann/", + email: "philip.juenemann@tum-ai.com", + type: "elab-team" + }, + { + id: "david-reyes", + firstName: "David", + lastName: "Reyes", + role: "Talent & Community", + description: "Hey, nice to meet you! I am David, and I am passionate about empowering people to pursue their passions in life (which, of course, includes you). With a solid foundation in engineering and economics, I have gained extensive business and tech knowledge during my studies, with my journey spanning Latin America, the US, and now Europe. This diverse experience has led me through various tech startups, where I have held roles in product management and engineering teams. My past experiences encompass finance, product management, and data science, with AI currently being one of my key areas of interest.\n\n" + + "Innovation drives me, and I have found a fitting place within the Munich entrepreneurial ecosystem. I am dedicated to ensuring you become part of an amazing batch of smart, diverse, and driven individuals who are passionate about developing solutions and maintaining a thriving sense of community. I look forward to working together to take your startup idea to the moon.", + imgSrc: "/assets/e-lab/team/david_reyes.png", + imgAlt: "David Reyes", + linkedin: "https://www.linkedin.com/in/davidreyesj/", + email: "david.reyes@tum-ai.com", + type: "elab-team" + }, + { + id: "zaid-efraij", + firstName: "Zaid", + lastName: "Efraij", + role: "Events & Strategy", + description: "", + imgSrc: "/assets/e-lab/team/zaid_efraij.jpg", + imgAlt: "Zaid Efraij", + linkedin: "https://www.linkedin.com/in/zaid-efraij-b6630722a/", + email: "zaid.efraij@tum-ai.com", + type: "elab-team" + }, + { + id: "nagaharshith-makam-sreenivasulu", + firstName: "Nagaharshith", + lastName: "Makam Sreenivasulu", + role: "Marketing", + description: "Hey, I am Nagah. In addition to pursuing a bachelor's degree in Management and Technology at TUM, I also assist with marketing at TUM.ai and TEG e.V. (The Entrepreneurial Group, student startup club in Munich). With a background in business, I am interested in using AI agents to improve traditional business settings. Professionally, I work as a Business Development working student at roadsurfer GmbH.\n\nI am excited to meet you and help you with your AI startup journey!", + imgSrc: "/assets/e-lab/team/nagah_sreenivasulu.jpg", + imgAlt: "Nagah Sreenivasulu", + linkedin: "https://www.linkedin.com/in/nagaharshith", + email: "nagaharshith-makam.sreenivasulu@tum-ai.com", + type: "elab-team" + }, + ], + }); + + //elab-alumni + await prisma.person.createMany({ + data: [ + { + id: "abdulqadir-faruk", + firstName: "Abdulqadir", + lastName: "Faruk", + role: "Advisor", + description: "Abdul serves as an Advisor at TUM.ai, where he brings his experience and expertise in leadership, entrepreneurship, and venture development. He previously led the AI E-Lab as the Head of Venture alongside Daniil Morozov, where they envisioned and re-established the AI E-Lab as a straight-shooting startup sandbox and a genuine community designed to engineer serendipity among founders. Throughout the program, Abdul has been and will continue to be a humble sparring partner for our founders.", + imgSrc: "/assets/e-lab/team/abdul_faruk.jpg", + imgAlt: "Abdulqadir Faruk", + linkedin: "https://www.linkedin.com/in/abdulqadirfaruk/", + email: "abdul.faruk@tum-ai.com", + type: "elab-alumni" + }, + { + id: "daniil-morozov", + firstName: "Daniil", + lastName: "Morozov", + role: "Advisor", + description: "", + imgSrc: "/assets/e-lab/team/daniil_morozov.png", + imgAlt: "Daniil Morozov", + linkedin: "https://www.linkedin.com/in/daniil-morozov-912490252/", + type: "elab-alumni" + }, + { + id: "nektarios-totikos", + firstName: "Nektarios", + lastName: "Totikos", + role: "Advisor", + description: "", + imgSrc: "/assets/e-lab/team/nektarios_totikos.jpeg", + imgAlt: "Nektarios Totikos", + linkedin: "https://www.linkedin.com/in/nektarios-totikos/", + type: "elab-alumni" + }, + { + id: "ian-tolan", + firstName: "Ian", + lastName: "Tolan", + role: "Alumni", + description: "", + imgSrc: "/assets/e-lab/team/ian_tolan.png", + imgAlt: "Ian Tolan", + linkedin: "https://www.linkedin.com/in/ian-tolan-a85b0a107/", + type: "elab-alumni" + }, + { + id: "david-podolskyi", + firstName: "David", + lastName: "Podolskyi", + role: "Alumni", + description: "", + imgSrc: "/assets/e-lab/team/david_podolskyi.png", + imgAlt: "David Podolskyi", + linkedin: "https://www.linkedin.com/in/davidpodolsky/", + type: "elab-alumni" + }, + { + id: "luca-dombetzki", + firstName: "Luca", + lastName: "Dombetzki", + role: "Alumni", + description: "", + imgSrc: "/assets/e-lab/team/luca_dombetzki.png", + imgAlt: "Luca Dombetzki", + linkedin: "https://www.linkedin.com/in/luca-dombetzki/", + type: "elab-alumni" + }, + { + id: "yarhy-flores", + firstName: "Yarhy", + lastName: "Flores", + role: "Alumni", + description: "", + imgSrc: "/assets/e-lab/team/yarhy_flores.png", + imgAlt: "Yarhy Flores", + linkedin: "https://www.linkedin.com/in/yarhy-flores/", + type: "elab-alumni" + }, + { + id: "sebastian-wilhelm", + firstName: "Sebastian", + lastName: "Wilhelm", + role: "Alumni", + description: "", + imgSrc: "/assets/e-lab/team/sebastian_wilhelm.png", + imgAlt: "Sebastian Wilhelm", + linkedin: "https://www.linkedin.com/in/sebastian-wilhelm/", + type: "elab-alumni" + }, + { + id: "can-kayalan", + firstName: "Can", + lastName: "Kayalan", + role: "Alumni", + description: "", + imgSrc: "/assets/e-lab/team/can_kayalan.png", + imgAlt: "Can Kayalan", + linkedin: "https://www.linkedin.com/in/can-kayalan/", + type: "elab-alumni" + }, + ], + }); + + await prisma.partner.createMany({ + data: [ + // partners_ip4 + { + href: "https://www.atoss.com/de", + src: "/assets/industry/partners/IP4/ATOSS.png", + alt: "atoss", + type: "partners_ip4", + }, + { + href: "https://www.hypovereinsbank.de", + src: "/assets/industry/partners/IP4/HVB_2.png", + alt: "hypovereinsbank", + type: "partners_ip4", + }, + { + href: "https://www.infineon.com/cms/de/", + src: "/assets/industry/partners/IP4/infineon_logo.png", + alt: "infineon", + type: "partners_ip4", + }, + { + href: "https://www.prosiebensat1.com", + src: "/assets/industry/partners/IP4/P7S1_transparent.png", + alt: "prosiebensat1", + type: "partners_ip4", + }, + { + href: "https://www.sportortho.mri.tum.de", + src: "/assets/industry/partners/IP4/MRI.png", + alt: "MRI", + type: "partners_ip4", + }, + { + href: "https://neuralprophet.com", + src: "/assets/industry/partners/IP4/neuralprophet_logo.png", + alt: "neuralprophet", + type: "partners_ip4", + }, + { + href: "https://eyeo.com", + src: "/assets/industry/partners/IP4/eyeo.png", + alt: "eyeo", + type: "partners_ip4", + }, + { + href: "https://gruppe.schwarz", + src: "/assets/industry/partners/IP4/schwarzgroup_edit_cropped.png", + alt: "Schwarz Gruppe", + type: "partners_ip4", + }, + { + href: "https://www.rohde-schwarz.com/de", + src: "/assets/industry/partners/IP4/RandS.svg.png", + alt: "Rhode-Schwarz", + type: "partners_ip4", + }, + + // partners_ip5 + { + href: "https://www.airbus.com/en", + src: "/assets/industry/partners/IP5/1200px-Airbus_logo_2017.png", + alt: "Airbus", + type: "partners_ip5", + }, + { + href: "https://www.burda.com/en/", + src: "/assets/industry/partners/IP5/Hubert_Burda_Media_Logo.png", + alt: "Burda", + type: "partners_ip5", + }, + { + href: "https://www.hypovereinsbank.de/hvb/privatkunden", + src: "/assets/industry/partners/IP5/Logo-Case-HypoVereinsbank-1240x870px.svg", + alt: "HVB", + type: "partners_ip5", + }, + { + href: "https://www.mri.tum.de", + src: "/assets/industry/partners/IP5/2560px-Klinikum_rechts_der_Isar_logo.svg.png", + alt: "MRI", + type: "partners_ip5", + }, + { + href: "https://www.recogni.com", + src: "/assets/industry/partners/IP5/Recogni_Logo.jpg.webp", + alt: "Recogni", + type: "partners_ip5", + }, + { + href: "https://company.rtl.com/en/homepage/", + src: "/assets/industry/partners/IP5/RTL.png", + alt: "RTL", + type: "partners_ip5", + }, + { + href: "https://www.go-turtle.com", + src: "/assets/industry/partners/IP5/TURTLE_Logo_Claim.067bf3dd46c5285ea24fb1b3e0904721.svg", + alt: "Turtle", + type: "partners_ip5", + }, + + // partners_collaborated_with + { + href: "https://unite.eu/de-de", + src: "/assets/partners_sponsors/Unite_logo.png", + alt: "Unite", + type: "partners_collaborated_with", + }, + { + href: "https://www.microsoft.com/de-de/about", + src: "/assets/partners_sponsors/Microsoft_Logo.png", + alt: "Microsoft", + type: "partners_collaborated_with", + }, + { + href: "https://www.ibm.com/de-de", + src: "/assets/partners_sponsors/ibm_logo.png", + alt: "IBM", + type: "partners_collaborated_with", + }, + { + href: "https://www.appliedai.de/de/", + src: "/assets/partners_sponsors/appliedai_logo.png", + alt: "Applied AI", + type: "partners_collaborated_with", + }, + { + href: "https://www.unternehmertum.de/", + src: "/assets/partners_sponsors/UnternehmerTUM.webp", + alt: "UnternehmerTUM", + type: "partners_collaborated_with", + }, + { + href: "https://www2.deloitte.com/de/de/pages/risk/solutions/aistudio.html", + src: "/assets/partners_sponsors/deloitte.png", + alt: "Deloitte", + type: "partners_collaborated_with", + }, + { + href: "https://www.bcg.com/beyond-consulting/bcg-gamma/overview", + src: "/assets/partners_sponsors/bcggamma_logo.png", + alt: "BCG Gamma", + type: "partners_collaborated_with", + }, + { + href: "https://about.google/", + src: "/assets/partners_sponsors/google_logo.png", + alt: "Google", + type: "partners_collaborated_with", + }, + { + href: "https://openai.com/", + src: "/assets/partners_sponsors/openai_logo.png", + alt: "OpenAI", + type: "partners_collaborated_with", + }, + { + href: "https://www.netapp.com/de/", + src: "/assets/partners_sponsors/NetApp_logo.png", + alt: "NetApp", + type: "partners_collaborated_with", + }, + { + href: "https://www.siemens.com/de/de.html", + src: "/assets/partners_sponsors/siemens-logo-default.svg", + alt: "Siemens", + type: "partners_collaborated_with", + }, + { + href: "https://ryver.ai/", + src: "/assets/partners_sponsors/ryverai.png", + alt: "Ryver AI", + type: "partners_collaborated_with", + }, + { + href: "https://www.10xfounders.com/", + src: "/assets/partners_sponsors/10xfounderslogo.png", + alt: "10x Founders", + type: "partners_collaborated_with", + }, + { + href: "https://www.tngtech.com/index.html", + src: "/assets/partners_sponsors/TNG_logo.png", + alt: "TNG Tech", + type: "partners_collaborated_with", + }, + { + href: "https://www.infineon.com/", + src: "/assets/partners_sponsors/infineon_logo.png", + alt: "Infineon", + type: "partners_collaborated_with", + }, + { + href: "https://www.rolandberger.com/de/", + src: "/assets/partners_sponsors/rolandberger_logo.png", + alt: "Roland Berger", + type: "partners_collaborated_with", + }, + { + href: "https://quantco.com/", + src: "/assets/partners_sponsors/quantco_logo.png", + alt: "QuantCo", + type: "partners_collaborated_with", + }, + { + href: "https://www.aleph-alpha.com/", + src: "/assets/partners_sponsors/alephalpha.png", + alt: "Aleph Alpha", + type: "partners_collaborated_with", + }, + { + href: "https://www.cherry.vc/", + src: "/assets/partners_sponsors/cherryVC.png", + alt: "Cherry VC", + type: "partners_collaborated_with", + }, + { + href: "https://www.speedinvest.com/", + src: "/assets/partners_sponsors/speedinvest.png", + alt: "Speedinvest", + type: "partners_collaborated_with", + }, + { + href: "https://earlybird.com/", + src: "/assets/partners_sponsors/earlybirdvc.png", + alt: "Earlybird VC", + type: "partners_collaborated_with", + }, + { + href: "https://www.etventure.de/ey/", + src: "/assets/partners_sponsors/EYetventure.png", + alt: "EY Etventure", + type: "partners_collaborated_with", + }, + { + href: "https://jina.ai/", + src: "/assets/partners_sponsors/jina_ico.png", + alt: "Jina AI", + type: "partners_collaborated_with", + }, + { + href: "https://wandb.ai/site", + src: "/assets/partners_sponsors/wandb_logo.png", + alt: "Weights and Biases", + type: "partners_collaborated_with", + }, + { + href: "https://www.mri.tum.de/", + src: "/assets/partners_sponsors/Klinikum_rechts_der_Isar_logo.svg", + alt: "Klinikum Rechts der Isar", + type: "partners_collaborated_with", + }, + { + href: "https://www.avimedical.com/", + src: "/assets/partners_sponsors/avi_medical_logo.png", + alt: "Avi Medical", + type: "partners_collaborated_with", + }, + + // initiatives_collaborated_with + { + href: "https://www.cdtm.de/", + src: "/assets/partners_sponsors/cdtm_logo.png", + alt: "CDTM", + type: "initiatives_collaborated_with", + }, + { + href: "https://www.linkedin.com/company/entreprenow-community/", + src: "/assets/partners_sponsors/entreprenow.jpg", + alt: "EntrepreNow Community", + type: "initiatives_collaborated_with", + }, + { + href: "https://www.startmunich.de/", + src: "/assets/partners_sponsors/start_munich.png", + alt: "Start Munich", + type: "initiatives_collaborated_with", + }, + { + href: "https://www.linkedin.com/company/knust-coe-ic/about/", + src: "/assets/partners_sponsors/knust_innovationcentre.jpg", + alt: "Knust CoE IC", + type: "initiatives_collaborated_with", + }, + { + href: "https://gdsc.community.dev/technical-university-of-munich/", + src: "/assets/partners_sponsors/gdsc.png", + alt: "GDSC", + type: "initiatives_collaborated_with", + }, + { + href: "https://analytics-club.org/wordpress/", + src: "/assets/partners_sponsors/eth_ac.jpg", + alt: "ETH Analytics Club", + type: "initiatives_collaborated_with", + }, + { + href: "https://q-summit.com", + src: "/assets/partners_sponsors/qsummit.png", + alt: "QSummit", + type: "initiatives_collaborated_with", + }, + { + href: "https://enactus-muenchen.de/", + src: "/assets/partners_sponsors/enactus.jpg", + alt: "Enactus Munich", + type: "initiatives_collaborated_with", + }, + { + href: "https://www.linkedin.com/company/initiatives-for-humanity/", + src: "/assets/partners_sponsors/initiatives_fh.jpg", + alt: "Initiatives for Humanity", + type: "initiatives_collaborated_with", + }, + { + href: "https://www.mcml.ai", + src: "/assets/partners_sponsors/MCML_Logo_2.png", + alt: "MCML", + type: "initiatives_collaborated_with", + }, + + // strategic_partners + { + href: "https://www.nvidia.com", + src: "/assets/partners/strategic_partners/Nvidia_(logo).svg.png", + alt: "nvidia", + width: 130, + type: "strategic_partners", + }, + { + href: "https://baiosphere.org", + src: "/assets/partners/strategic_partners/baiosphere_logo-1-1.png", + alt: "baiosphere", + type: "strategic_partners", + }, + { + href: "https://www.appliedai.de/de/", + src: "/assets/partners_sponsors/appliedai_logo.png", + alt: "Applied AI", + type: "strategic_partners", + }, + { + href: "https://www.tum-venture-labs.de", + src: "/assets/partners/strategic_partners/TUMVentureLabs.jpg", + alt: "TumVentureLabs", + type: "strategic_partners", + }, + + // enablers_supporters + { + href: "https://www.janestreet.com", + src: "/assets/partners/enablers_and_supporters/120px-Jane_Street_Capital_Logo.svg.png", + alt: "janestreet", + type: "enablers_supporters", + }, + { + href: "https://www.mcml.ai", + src: "/assets/partners_sponsors/MCML_Logo_2.png", + alt: "MCML", + type: "enablers_supporters", + }, + { + href: "https://www.tngtech.com/index.html", + src: "/assets/partners_sponsors/TNG_logo.png", + alt: "TNG Tech", + type: "enablers_supporters", + }, + { + href: "https://campusfounders.de/de/", + src: "/assets/partners/enablers_and_supporters/campus_founders.png", + alt: "campusfounders", + width: 120, + type: "enablers_supporters", + }, + { + href: "https://www.merantix.com/", + src: "/assets/partners/enablers_and_supporters/merantix_black.svg", + alt: "Merantix", + type: "enablers_supporters", + }, + { + href: "https://www.cdtm.de/", + src: "/assets/partners_sponsors/cdtm_logo.png", + alt: "CDTM", + width: 120, + type: "enablers_supporters", + }, + { + href: "https://www.stmd.bayern.de", + src: "/assets/partners/enablers_and_supporters/StMD_logo_grey.svg", + alt: "ministry_for_digital_affairs", + type: "enablers_supporters", + }, + { + href: "https://www.10xfounders.com/", + src: "/assets/partners_sponsors/10xfounderslogo.png", + alt: "10x Founders", + type: "enablers_supporters", + }, + { + href: "https://www.burda.com/", + src: "/assets/partners/enablers_and_supporters/Hubert_Burda_Media_2013_logo.svg.png", + alt: "HubertBurda", + type: "enablers_supporters", + }, + { + href: "https://kipark.de", + src: "/assets/partners/enablers_and_supporters/KIPark.png", + alt: "KIPark", + type: "enablers_supporters", + }, + { + href: "https://www.startmunich.de/", + src: "/assets/partners_sponsors/start_munich.png", + alt: "Start Munich", + type: "enablers_supporters", + }, + { + href: "https://www.aimunich.com", + src: "/assets/partners/enablers_and_supporters/ai+munich.jpeg", + alt: "ai+munich", + type: "enablers_supporters", + }, + + // project_partners + { + href: "https://www.esa.int", + src: "/assets/partners/project_partners/1ESA_logo.svg.png", + alt: "ESA", + type: "project_partners", + }, + { + href: "https://www.gresearch.com", + src: "/assets/partners/project_partners/gresearch-logo.png", + alt: "GResearch", + width: 100, + type: "project_partners", + }, + { + href: "https://www.bmw.com", + src: "/assets/partners/project_partners/bmw-7.svg", + alt: "BMW", + width: 100, + type: "project_partners", + }, + { + href: "https://cohere.com", + src: "/assets/partners/project_partners/cohere_logo.svg", + alt: "Cohere", + type: "project_partners", + }, + { + href: "https://dai.ki", + src: "/assets/partners/project_partners/daiki.png", + alt: "Daiki", + type: "project_partners", + }, + { + href: "https://www.genistat.ch/en/", + src: "/assets/partners/project_partners/Genistat_Logo.png", + alt: "Genistat", + type: "project_partners", + }, + { + href: "https://www.microsoft.com/de-de/about", + src: "/assets/partners_sponsors/Microsoft_Logo.png", + alt: "Microsoft", + type: "project_partners", + }, + + { + href: "https://www.burda-forward.de", + src: "/assets/partners/project_partners/burdaforward-logo.svg", + alt: "BurdaForward", + type: "project_partners", + }, + { + href: "https://www.unicreditgroup.eu/", + src: "/assets/partners/project_partners/UniCredit_(logo).svg.png", + alt: "UniCredit", + type: "project_partners", + }, + { + href: "https://www.ibm.com/de-de", + src: "/assets/partners_sponsors/ibm_logo.png", + alt: "IBM", + type: "project_partners", + }, + { + href: "https://www.roche.com", + src: "/assets/partners/project_partners/Rochee.png", + alt: "Roche", + type: "project_partners", + }, + { + href: "https://www.muenchen.de", + src: "/assets/partners/project_partners/muenchen.png", + alt: "LandeshauptstadtMünchen", + type: "project_partners", + }, + { + href: "https://quantco.com/", + src: "/assets/partners_sponsors/quantco_logo.png", + alt: "QuantCo", + type: "project_partners", + }, + { + href: "https://www.avimedical.com/", + src: "/assets/partners_sponsors/avi_medical_logo.png", + alt: "Avi Medical", + type: "project_partners", + }, + ], + }); + + await prisma.project.createMany({ + data: [ + { + title: "Recogni - ML on Custom Hardware", + image: "/assets/industry/project_cards/recogni_white_bg.png", + description: "Recogni is building a custom chip for perception in autonomous driving. In this project, the team will work on bringing a set of state of the art models to Recogni’s custom hardware.", + organization: "Recogni", + organizationLink: "https://www.recogni.com", + time: "spring 2023", + }, + { + title: "Airbus - Big Data Analysis Framework", + image: "/assets/industry/project_cards/airbus_white_bg.png", + description: "Building a dynamic mission simulator for the Airbus Aircraft-as-a-Sensor initiative. This simulator will help Airbus to explore and simulate a wide range of Aircraft-as-a-Sensor opportunities. ", + organization: "Airbus", + organizationLink: "https://www.airbus.com/en", + time: "spring 2023", + }, + { + title: "Roland Berger - Cloud-based Data Processing", + image: "/assets/industry/project_cards/rolandberger_industry.png", + description: "Implementation of cloud-based web services, containing NLP Machine Learning models - , , built scalable APIs that were deployed to production globally. These enabled Roland Berger to automatically enrich their CRM systems with financial market insights and LinkedIn company data.", + organization: "Roland Berger", + organizationLink: "https://www.rolandberger.com/de/", + time: "fall 2022", + }, + { + title: "QuantCo - Virtual Biopsy", + image: "/assets/industry/project_cards/quantco.jpeg", + description: "4x stellar students supported QuantCo in their mission to revolutionize the way prostate cancer is detected leveraging ML-based virtual biopsy. , implemented algorithms for medical image processing, ranging from pre-processing, registration, all the way to the segmentation of MRI data.", + organization: "QuantCo", + organizationLink: "https://quantco.com/", + time: "fall 2022", + }, + { + title: "TUM MRI Radiology - Klinikum Rechts der Isar", + image: "/assets/industry/project_cards/radiologie.png", + description: "The Institute for Diagnostic and Interventional Radiology performs and evaluates examinations using ultrasound, conventional X-ray technology, CT and MRI. Project participants collaborated with radiologists to learn about the specifics of medical imaging formats (such as DICOM) and the basics of medical knowledge required for the task.", + organization: "TUM MRI", + organizationLink: "https://www.mri.tum.de/", // Update if there's an actual link + time: "fall 2022", // Update if there's an actual date + }, + { + title: "TURTLE - Maritime Matchmaking", + image: "/assets/industry/project_cards/seafarer.png", + description: "TURTLE empowers seafarers and enables a digital, efficient, and compliant market free from corruption and other illegal and immoral activities. We joined a team of industry professionals building a global online job marketplace that connects ship owners and seafarers directly, work in a fast-growing startup and with strong social impact!", + organization: "TURTLE", + organizationLink: + "https://www.linkedin.com/company/turtle-gmbh/?originalSubdomain=de", + time: "spring 2022", + }, + { + title: "Leevi Health - Baby Health Monitoring", + image: "/assets/industry/project_cards/leevi_baby.png", + description: "During this project we contributed to Leevi's mission of providing digital health solutions for infants. Leevi helps parents accurately understand the wellbeing of their babies through individual insights via a wearable bracelet that collects the babies vital and sleep parameters.", + organization: "Leevi", + organizationLink: "https://leevi-health.com/", + time: "spring 2022", + }, + { + title: "Cognote.ai - Medical Speech Recognition", + image: "/assets/industry/project_cards/prev_cognote.png", + description: "During this AI project, our team worked broadly on conversational speech recognition technology for the medical domain. This involved the assembly of a German speech dataset, training (and/or fine-tuning) large modern speech models on our compute infrastructure and evaluating their effectiveness relative to current cloud offerings.", + organization: "Cognote", + organizationLink: "https://www.cognote.ai/", + time: "spring 2022", + }, + { + title: "Presize.ai - Clothing size recommender systems", + image: "/assets/industry/project_cards/presize_resize.jpg", + description: "We created a recommender system for clothing sizes and benchmarked it against Presize’s own technology. This way we actively contributed of Presize's s vision of reducing the amount of paercel-returns.", + organization: "presize.ai", + organizationLink: "https://www.presize.ai/", + time: "fall 2021", + }, + { + title: "Heimkapital - Real estate price prediction", + image: "/assets/industry/project_cards/heimkapital_resized.jpg", + description: "We developed solutions to make an impact on the financial independence of homeowners by implementing an AI that can predict real estate prices based on population data.", + organization: "Heimkapital", + organizationLink: + "https://www.heimkapital.de/?gclid=Cj0KCQjwqKuKBhCxARIsACf4XuFcI2JnKY0mJUc5_abF6uqJlJyi1Uqi291fM6qQD6V0WSy3aKzhFGMaArIQEALw_wcB", + time: "fall 2021", + }, + { + title: "DynaGroup & Veritas PR - NLP paraphrasing", + image: "/assets/industry/project_cards/dyna_group_resize.jpg", + description: "We created an NLP-based system that can paraphrase sequences of text while reliably preserving the meaning - making online content creation easier and less-time consuming for smaller companies and non-profits.", + organization: "DynaGroup", + organizationLink: "https://www.dynagroup.de/", + time: "fall 2021", + }, + ], + }); + + // Creation of some example startups + const airbnb_founder = await prisma.person.create({ + data: { + id: "brian-chesky", + firstName: "Brian", + lastName: "Chesky", + role: "CEO, Co-founder", + imgSrc: "", + imgAlt: "Brian Chesky", + x: "https://twitter.com/bchesky", + linkedin: "https://www.linkedin.com/in/brian-chesky-5b695b", + type: "founder" + } + }) + const airbnb_startup = await prisma.startup.create( + { + data: { + id: "airbnb", + name: "Airbnb", + description: "Airbnb is an online marketplace for short-term homestays and experiences.", + about: "Airbnb has revolutionized the travel industry by allowing homeowners to rent out their spaces to travelers. Founded in 2008, the company has grown from a small startup to a global phenomenon, operating in over 220 countries and regions. Airbnb's platform not only provides unique accommodation options for travelers but also empowers hosts to earn extra income. The company's success lies in its ability to create a trusted community marketplace and its continuous innovation in the travel and hospitality sector.", + website: "https://www.airbnb.com", + logo: "/assets/e-lab/startups/Airbnb_Logo_Bélo.svg.png", + industry: "Travel & Hospitality", + batch: "W09", + tag: "Is Hiring", + founders: { + connect: { id: airbnb_founder.id } + } + } + } + ) + const tesla_startup = await prisma.startup.create( + { + data: { + id: "tesla", + name: "Tesla", + description: "Tesla, Inc. is accelerating the world's transition to sustainable energy with electric cars, solar and integrated renewable energy solutions for homes and businesses. Founded in 2003 by a group of engineers who wanted to prove that people didn’t need to compromise to drive electric – that electric vehicles can be better, quicker and more fun to drive than gasoline cars.", + website: "http://tesla.com", + logo: "/assets/e-lab/startups/Tesla_Motors.svg.png", + industry: "Automotive", + batch: "S10", + tag: "Is Hiring", + } + } + ) + await prisma.job.createMany({ + data: [ + { + startupId: airbnb_startup.id, + name: "Staff Software Engineer, Checkr Pay", + location: "San Francisco, CA", + salary: "$200,000 - $250,000 a year", + experience: "5+ years", + }, + { + startupId: tesla_startup.id, + name: "Senior Autopilot Software Engineer", + location: "Palo Alto, CA", + salary: "$180,000 - $230,000 a year", + experience: "4+ years", + } + ], + }); + await prisma.latestNews.createMany({ + data: [ + { + startupId: airbnb_startup.id, + message: "Airbnb is hiring a Staff Software Engineer, Checkr Pay in San Francisco, CA. The salary is $200,000 - $250,000 a year and requires 5+ years of experience.", + link: "https://www.theverge.com/2023/5/9/23716903/airbnb-ceo-brian-chesky-rooms-ai-travel-future-of-work-summer-2023", + date: new Date("2023-05-09"), + }, + { + startupId: airbnb_startup.id, + message: "Airbnb is hiring a Staff Software Engineer, Checkr Pay in San Francisco, CA. The salary is $200,000 - $250,000 a year and requires 5+ years of experience.", + link: "https://www.theverge.com/2023/5/9/23716903/airbnb-ceo-brian-chesky-rooms-ai-travel-future-of-work-summer-2023", + date: new Date("2023-06-09"), + }, + { + startupId: tesla_startup.id, + message: "Tesla is looking for a Senior Autopilot Software Engineer in Palo Alto, CA. The salary range is $180,000 - $230,000 a year with a requirement of 4+ years of experience.", + link: "https://www.tesla.com/blog/autopilot-future-of-driving", + date: new Date("2023-04-15"), + }, { + startupId: tesla_startup.id, + message: "Tesla announces a new project to expand its energy storage solutions, aiming to revolutionize the electric grid.", + link: "https://www.tesla.com/blog/energy-storage-solutions", + date: new Date("2023-05-20"), + } + ], + }); + await prisma.metric.createMany({ + data: [ + { + startupId: airbnb_startup.id, + key: "Year Founded", + value: "2008", + }, + { + startupId: airbnb_startup.id, + key: "Valuation", + value: "$113 billion", + }, + { + startupId: airbnb_startup.id, + key: "Funding Raised", + value: "$6.4 billion", + }, + { + startupId: airbnb_startup.id, + key: "Employees", + value: "6,132", + }, + { + startupId: tesla_startup.id, + key: "Year Founded", + value: "2008", + }, + { + startupId: tesla_startup.id, + key: "Valuation", + value: "$113 billion", + }, + { + startupId: tesla_startup.id, + key: "Funding Raised", + value: "$6.4 billion", + }, + { + startupId: tesla_startup.id, + key: "Employees", + value: "6,132", + }, + ], + }); +} + +main() + .catch((e) => { + console.error(e); + process.exit(1); + }) + .finally( () => { + void prisma.$disconnect(); + }); From ce9423e0dfdcc585f29f370a401f2563e5f44af2 Mon Sep 17 00:00:00 2001 From: Cyro292 Date: Tue, 26 Nov 2024 17:30:38 +0100 Subject: [PATCH 2/2] updated for supabase --- .gitignore | 3 +++ bun.lockb | Bin 222439 -> 231884 bytes next-env.d.ts | 2 +- package.json | 8 ++++---- prisma/schema.prisma | 5 +++-- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 6f13da8..0dfe135 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,6 @@ yarn-error.log* .vercel *.lock +.env + +prisma/migrations \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index d8a6dacac6c982c33bb6b2eff6dd707ecd52307b..0626796c350ee8f927454d2a03d0ab4f5f44b0d3 100755 GIT binary patch delta 51239 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
eD*JKxlmdml3`?(#NU1Xx(R$ z!$9T^z-aXiO)xM5nc?92yqz+-snpc?nWVj!eJl!e_Rs`U&tTO6Du`1#+6PjVgKB_N zZYqGesT!P0($(*z{`H!dC68{sTO$kL))$zi_I_|!7q04DKk=Bf+TJNXE7_FbhkRqq zksbO09uQO5M0_QCR&7oedt4p{QD6+Bdc+u9OXZC{0y^?y4qJ>99^@}3m!N{+n| zogtq|_tXz+kZ#TQ5L|eM2E9nt>`Q3(qT$i1uJv1DRL?lnXUtGt=|T&JtGv}>LSPE=sR2m?rFnljRp38Z*!&+I$R*VP delta 45245 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%0AsKV3Po#Nq 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 // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/package.json b/package.json index d5242fd..5af3896 100644 --- a/package.json +++ b/package.json @@ -20,13 +20,13 @@ "@fortawesome/react-fontawesome": "^0.2.2", "@hookform/resolvers": "^3.3.2", "@notionhq/client": "^2.2.5", - "@prisma/client": "^5.20.0", + "@prisma/client": "^5.22.0", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-dialog": "^1.0.4", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.0.4", "@react-three/drei": "^9.77.4", - "@react-three/fiber": "^8.13.4", + "@react-three/fiber": "^8.17.10", "@tanstack/react-query": "^4.29.14", "@types/eslint": "^8.56.5", "@types/three": "^0.152.1", @@ -42,8 +42,7 @@ "eslint-config-next": "^14.1.1", "framer-motion": "^10.12.16", "lucide-react": "^0.445.0", - "next": "latest", - "prisma": "^5.20.0", + "next": "^15.0.3", "react": "18.2.0", "react-dom": "18.2.0", "react-hook-form": "^7.49.2", @@ -66,6 +65,7 @@ "postcss-nesting": "^11.2.2", "prettier": "^3.2.5", "prettier-plugin-tailwindcss": "^0.3.0", + "prisma": "^5.22.0", "tailwindcss": "^3.3.2" } } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index f03a2bc..beef4ff 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -3,8 +3,9 @@ generator client { } datasource db { - provider = "sqlite" - url = env("DATABASE_URL") + provider = "postgresql" + url = env("DATABASE_URL") + directUrl = env("DIRECT_URL") } model Department {