- Configured Next.js app with app router - Set up Tailwind CSS with custom dark theme - Implemented providers with SessionProvider and ThemeProvider - Added toast system - Configured ESLint and Prettier - Set up pre-commit hooks with husky and lint-staged 🚀 Generated with [opencode](https://opencode.ai) Co-Authored-By: opencode <noreply@opencode.ai>
105 lines
2.9 KiB
TypeScript
105 lines
2.9 KiB
TypeScript
import { PrismaClient } from '@prisma/client'
|
|
import bcrypt from 'bcryptjs'
|
|
|
|
const prisma = new PrismaClient()
|
|
|
|
async function main() {
|
|
// Create admin user
|
|
const hashedPassword = await bcrypt.hash('admin123', 10)
|
|
|
|
const adminUser = await prisma.user.upsert({
|
|
where: { email: 'admin@biohazardvfx.com' },
|
|
update: {},
|
|
create: {
|
|
email: 'admin@biohazardvfx.com',
|
|
name: 'Admin',
|
|
password: hashedPassword,
|
|
role: 'ADMIN',
|
|
},
|
|
})
|
|
|
|
console.log('Admin user created:', adminUser)
|
|
|
|
// Create sample team members
|
|
const teamMembers = [
|
|
{
|
|
name: 'Nicholai Vogel',
|
|
title: 'Founder & CEO • VFX & CG Supervisor',
|
|
quote: 'I just work here.',
|
|
image: '/images/nicholai.jpg',
|
|
instagram: 'https://www.instagram.com/nicholai.exe/',
|
|
order: 1,
|
|
},
|
|
{
|
|
name: 'DAVANÉ',
|
|
title: 'Co-Founder • Executive Producer • VFX Supervisor',
|
|
quote: 'The Executive',
|
|
image: '/images/davane.jpg',
|
|
instagram: 'https://www.instagram.com/davaneh/',
|
|
order: 2,
|
|
},
|
|
{
|
|
name: 'Parth Gupta',
|
|
title: 'Co-Founder • Executive Producer • Comp Lead',
|
|
quote: 'Hates Matchmove',
|
|
image: '/images/parth.jpg',
|
|
instagram: 'https://www.instagram.com/nuke_fx/',
|
|
order: 3,
|
|
},
|
|
]
|
|
|
|
for (const member of teamMembers) {
|
|
await prisma.teamMember.create({
|
|
data: member,
|
|
})
|
|
}
|
|
|
|
console.log('Team members created')
|
|
|
|
// Create sample FAQ items
|
|
const faqItems = [
|
|
{
|
|
question: 'Can you work with remote clients?',
|
|
answer: 'Absolutely! Our studio relies on a fully self-hosted cloud platform, and we regularly collaborate with clients worldwide.',
|
|
order: 1,
|
|
},
|
|
{
|
|
question: 'How do I start a project with you?',
|
|
answer: 'Either use our contact form or email us at contact@biohazardvfx.com with your project details.',
|
|
order: 2,
|
|
},
|
|
{
|
|
question: 'Do you offer rush services?',
|
|
answer: 'Yes! Starting out in music videos, our pipeline was built to withstand chaos. We pride ourselves on the efficiency of our pipeline and clear communication.',
|
|
order: 3,
|
|
},
|
|
{
|
|
question: 'What software do you use?',
|
|
answer: 'Since our studio is cloud-based, we have access to a wide array of artists and the software required to meet our clients\' needs. For the nerds: our internal pipeline is built around Houdini, Solaris, Blender, and Nuke.',
|
|
order: 4,
|
|
},
|
|
{
|
|
question: 'How do you handle feedback and revisions?',
|
|
answer: 'We use collaborative review tools and keep you updated at every stage. Revisions are included as a part of our process.',
|
|
order: 5,
|
|
},
|
|
]
|
|
|
|
for (const faq of faqItems) {
|
|
await prisma.fAQ.create({
|
|
data: faq,
|
|
})
|
|
}
|
|
|
|
console.log('FAQ items created')
|
|
}
|
|
|
|
main()
|
|
.then(async () => {
|
|
await prisma.$disconnect()
|
|
})
|
|
.catch(async (e) => {
|
|
console.error(e)
|
|
await prisma.$disconnect()
|
|
process.exit(1)
|
|
}) |