├── .eslintrc.json
├── .gitignore
├── .vscode
└── settings.json
├── README.md
├── app
├── (landing-page)
│ ├── _components
│ │ ├── eighth-section.tsx
│ │ ├── fifth-section.tsx
│ │ ├── first-section.tsx
│ │ ├── fourth-section.tsx
│ │ ├── ninth-section.tsx
│ │ ├── second-section.tsx
│ │ ├── seventh-section.tsx
│ │ ├── sixth-section.tsx
│ │ ├── slider
│ │ │ ├── _components
│ │ │ │ ├── slider-one.tsx
│ │ │ │ ├── slider-second.tsx
│ │ │ │ ├── slider-third.tsx
│ │ │ │ └── slider.d.ts
│ │ │ └── sliders.tsx
│ │ ├── tenth-section.tsx
│ │ └── third-section.tsx
│ └── page.tsx
├── api
│ └── contact
│ │ └── route.ts
├── bird-ai
│ ├── _components
│ │ ├── faqs.tsx
│ │ ├── first-section.tsx
│ │ ├── fourth-section.tsx
│ │ ├── second-section.tsx
│ │ ├── testimonials.tsx
│ │ └── third-section.tsx
│ └── page.tsx
├── contact
│ ├── _components
│ │ └── first-section.tsx
│ └── page.tsx
├── engineering
│ ├── _components
│ │ ├── explore.tsx
│ │ ├── features.tsx
│ │ ├── fifth-section.tsx
│ │ ├── first-section.tsx
│ │ ├── fourth-section.tsx
│ │ ├── quote.tsx
│ │ ├── second-section.tsx
│ │ ├── slider.tsx
│ │ └── third-section.tsx
│ └── page.tsx
├── enterprise
│ ├── _components
│ │ ├── bottom-card-blue.tsx
│ │ ├── eighth-section.tsx
│ │ ├── fifth-section.tsx
│ │ ├── first-section.tsx
│ │ ├── fourth-section.tsx
│ │ ├── ninth-section.tsx
│ │ ├── quote.tsx
│ │ ├── second-section.tsx
│ │ ├── seventh-section.tsx
│ │ ├── sixth-section.tsx
│ │ ├── testimonials.tsx
│ │ └── third-section.tsx
│ └── page.tsx
├── favicon.ico
├── free
│ └── page.tsx
├── globals.css
├── layout.tsx
├── pricing
│ ├── _components
│ │ └── first-section.tsx
│ └── page.tsx
├── sales
│ ├── _components
│ │ ├── explore.tsx
│ │ ├── features.tsx
│ │ ├── fifth-section.tsx
│ │ ├── first-section.tsx
│ │ ├── fourth-section.tsx
│ │ ├── quote.tsx
│ │ ├── second-section.tsx
│ │ ├── slider.tsx
│ │ └── third-section.tsx
│ └── page.tsx
├── screen-recorder
│ ├── _components
│ │ ├── faqs.tsx
│ │ ├── feedback-section.tsx
│ │ ├── first-section.tsx
│ │ ├── fourth-section.tsx
│ │ ├── phone-section.tsx
│ │ ├── second-section.tsx
│ │ └── third-section.tsx
│ └── page.tsx
├── sign-in
│ ├── _components
│ │ └── first-section.tsx
│ └── page.tsx
└── team-alignment
│ ├── _components
│ ├── explore.tsx
│ ├── features.tsx
│ ├── fifth-section.tsx
│ ├── first-section.tsx
│ ├── fourth-section.tsx
│ ├── quote.tsx
│ ├── second-section.tsx
│ ├── slider.tsx
│ └── third-section.tsx
│ └── page.tsx
├── components.json
├── components
└── ui
│ ├── accordion.tsx
│ ├── bottom-card.tsx
│ ├── bottom-section.tsx
│ ├── button.tsx
│ ├── checkbox.tsx
│ ├── footer.tsx
│ ├── form.tsx
│ ├── input.tsx
│ ├── label.tsx
│ ├── navbar
│ ├── _components
│ │ ├── action-buttons.tsx
│ │ ├── content-menu.tsx
│ │ ├── drop-down-menu.tsx
│ │ ├── logo.tsx
│ │ └── menu.tsx
│ └── navbar.tsx
│ ├── select.tsx
│ ├── textarea.tsx
│ ├── toast.tsx
│ ├── toaster.tsx
│ └── use-toast.ts
├── lib
└── utils.ts
├── next.config.js
├── package.json
├── postcss.config.js
├── public
├── images
│ ├── sales.svg
│ ├── undraw-1.svg
│ ├── undraw-2.svg
│ └── undraw-3.svg
├── logos
│ ├── bird-logo.png
│ ├── logoipsum-211.svg
│ ├── logoipsum-222.svg
│ ├── logoipsum-223.svg
│ ├── logoipsum-224.svg
│ ├── logoipsum-225.svg
│ ├── logoipsum-226.svg
│ ├── logoipsum-243.svg
│ ├── logoipsum-245.svg
│ ├── logoipsum-258.svg
│ ├── logoipsum-262.svg
│ ├── logoipsum-264.svg
│ ├── logoipsum-265.svg
│ ├── logoipsum-270.svg
│ ├── logoipsum-273.svg
│ ├── logoipsum-274.svg
│ ├── logoipsum-285.svg
│ ├── logoipsum-289.svg
│ ├── logoipsum-292.svg
│ ├── logoipsum-293.svg
│ ├── logoipsum-294.svg
│ ├── logoipsum-295.svg
│ ├── logoipsum-296.svg
│ ├── logoipsum-297.svg
│ ├── logoipsum-298.svg
│ ├── logoipsum-299.svg
│ ├── logoipsum-300.svg
│ ├── logoipsum-311.svg
│ ├── logoipsum-317.svg
│ ├── logoipsum-323.svg
│ ├── logoipsum-325.svg
│ ├── logoipsum-327.svg
│ ├── logoipsum-329.svg
│ └── twitter-logo.png
├── next.svg
├── vercel.svg
└── videos
│ └── hero-1.mp4
├── tailwind.config.js
├── tailwind.config.ts
└── tsconfig.json
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals"
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 | .yarn/install-state.gz
8 |
9 | # testing
10 | /coverage
11 |
12 | # next.js
13 | /.next/
14 | /out/
15 |
16 | # production
17 | /build
18 |
19 | # misc
20 | .DS_Store
21 | *.pem
22 |
23 | # debug
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
34 | # typescript
35 | *.tsbuildinfo
36 | next-env.d.ts
37 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2 |
3 | ## Getting Started
4 |
5 | First, run the development server:
6 |
7 | ```bash
8 | npm run dev
9 | # or
10 | yarn dev
11 | # or
12 | pnpm dev
13 | # or
14 | bun dev
15 | ```
16 |
17 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18 |
19 | You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
20 |
21 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
22 |
23 | ## Learn More
24 |
25 | To learn more about Next.js, take a look at the following resources:
26 |
27 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29 |
30 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
31 |
32 | ## Deploy on Vercel
33 |
34 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35 |
36 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
37 |
--------------------------------------------------------------------------------
/app/(landing-page)/_components/fifth-section.tsx:
--------------------------------------------------------------------------------
1 | import { Button } from "@/components/ui/button";
2 |
3 | const FifthSection = () => {
4 | return (
5 |
6 |
15 |
26 | Keep your content safe
27 |
28 |
29 |
42 |
43 | Enterprise-grade
44 | security to keep your data
45 | and your customer's data private and secure.
46 | We offer SSO, SCIM as
47 | well as custom data retention policies and privacy settings.
48 |
49 |
50 |
51 |
52 |
67 | Learn more
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
);
76 | }
77 |
78 | export default FifthSection;
--------------------------------------------------------------------------------
/app/(landing-page)/_components/first-section.tsx:
--------------------------------------------------------------------------------
1 | import { Button } from "@/components/ui/button";
2 | import Link from "next/link";
3 |
4 | const FirstSection = () => {
5 | return (
6 |
7 |
8 |
9 |
20 | One video is worth a thousand words
21 |
22 |
23 |
24 |
36 |
37 | Easily record and share
38 | AI-powered video messages
39 | with your teammates and
40 | customers to supercharge productivity
41 |
42 |
43 |
44 |
45 |
48 |
72 | Get Bird for Free
73 |
74 |
75 |
76 |
77 |
78 |
79 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 | );
103 | }
104 |
105 | export default FirstSection;
--------------------------------------------------------------------------------
/app/(landing-page)/_components/ninth-section.tsx:
--------------------------------------------------------------------------------
1 | import { ExternalLink } from "lucide-react";
2 |
3 | const NinthSection = () => {
4 | return (
5 |
6 |
7 |
8 |
9 |
10 | Bird for Enterprise
11 |
12 |
13 | Bird for Enterprise helps teams securely manage and organize async
14 | video communication at scale
15 |
16 |
17 |
18 |
37 |
38 |
39 |
Learn more
40 |
41 |
42 |
43 |
44 |
45 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | );
65 | };
66 |
67 | export default NinthSection;
68 |
--------------------------------------------------------------------------------
/app/(landing-page)/_components/slider/_components/slider-one.tsx:
--------------------------------------------------------------------------------
1 |
2 | 'use client'
3 |
4 | import Slider from 'react-infinite-logo-slider';
5 |
6 | import Image from 'next/image';
7 |
8 | const SliderOne = () => {
9 | return (
10 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
);
62 | }
63 |
64 | export default SliderOne;
--------------------------------------------------------------------------------
/app/(landing-page)/_components/slider/_components/slider-second.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import Slider from 'react-infinite-logo-slider';
4 |
5 | import Image from 'next/image';
6 |
7 |
8 | const SliderTwo = () => {
9 | return (
10 |
11 |
12 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
);
63 | }
64 |
65 | export default SliderTwo;
--------------------------------------------------------------------------------
/app/(landing-page)/_components/slider/_components/slider-third.tsx:
--------------------------------------------------------------------------------
1 |
2 | 'use client'
3 |
4 | import Slider from 'react-infinite-logo-slider';
5 |
6 | import Image from 'next/image';
7 |
8 |
9 | const SliderThree = () => {
10 | return (
11 |
12 |
13 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
);
70 | }
71 |
72 | export default SliderThree;
--------------------------------------------------------------------------------
/app/(landing-page)/_components/slider/_components/slider.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'react-infinite-logo-slider'
--------------------------------------------------------------------------------
/app/(landing-page)/_components/slider/sliders.tsx:
--------------------------------------------------------------------------------
1 | import SliderOne from "./_components/slider-one";
2 | import SliderTwo from "./_components/slider-second";
3 | import SliderThree from "./_components/slider-third";
4 | const Sliders = () => {
5 | return (
6 |
7 |
21 | More Than 21 Million People Across 120,000 Companies Choose Bird
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
);
34 | }
35 |
36 | export default Sliders;
--------------------------------------------------------------------------------
/app/(landing-page)/page.tsx:
--------------------------------------------------------------------------------
1 | import Navbar from "@/components/ui/navbar/navbar";
2 | import FirstSection from "./_components/first-section";
3 | import Sliders from "./_components/slider/sliders";
4 | import SecondSection from "./_components/second-section";
5 | import ThirdSection from "./_components/third-section";
6 | import FourthSection from "./_components/fourth-section";
7 | import FifthSection from "./_components/fifth-section";
8 | import SixthSection from "./_components/sixth-section";
9 | import SeventhSection from "./_components/seventh-section";
10 | import EighthSection from "./_components/eighth-section";
11 | import NinthSection from "./_components/ninth-section";
12 | import TenthSection from "./_components/tenth-section";
13 | import BottomCard from "@/components/ui/bottom-card";
14 | import BottomSection from "@/components/ui/bottom-section";
15 | import Footer from "@/components/ui/footer";
16 |
17 | const LandingPage = () => {
18 | return (
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
);
35 | }
36 |
37 | export default LandingPage;
--------------------------------------------------------------------------------
/app/api/contact/route.ts:
--------------------------------------------------------------------------------
1 | import { NextResponse } from "next/server";
2 |
3 | import nodemailer from "nodemailer";
4 |
5 | export async function POST(req: Request) {
6 | if (req.method === "POST") {
7 |
8 | try {
9 |
10 | const {
11 | first_name,
12 | last_name,
13 | email,
14 | job_title,
15 | company_name,
16 | help,
17 | company_size,
18 | info,
19 | } = await req.json();
20 |
21 |
22 | const transporter = nodemailer.createTransport({
23 | host: "smtp.gmail.com",
24 | port: 465,
25 | secure: true,
26 | auth: {
27 | user: "tasicigor123@gmail.com",
28 | pass: "bwnnpzipkkvnnedx",
29 | },
30 | });
31 |
32 | const mailOptions = {
33 | from: email,
34 | to: "tasicigor123@gmail.com",
35 | subject: "Contact Form Submission",
36 | html: `
37 | Contact Form
38 | First Name: ${first_name}
39 | Last Name: ${last_name}
40 | Email: ${email}
41 | Job Title: ${job_title}
42 | Company Name: ${company_name}
43 | Help: ${help}
44 | Company Size: ${company_size}
45 | Info: ${info}
46 | `,
47 | };
48 |
49 |
50 | await transporter.sendMail(mailOptions);
51 |
52 | return NextResponse.json("email has been sent");
53 | } catch (error) {
54 | return NextResponse.json("email has not been sent");
55 | }
56 | } else {
57 | return NextResponse.json('method not allowed');
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/app/bird-ai/_components/faqs.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | Accordion,
3 | AccordionContent,
4 | AccordionItem,
5 | AccordionTrigger
6 | } from '@/components/ui/accordion'
7 |
8 | const FAQS = () => {
9 | return (
10 |
11 |
12 | FAQS
13 |
14 |
18 |
20 | How do I purchase Bird ?
21 |
22 | It is possible to purchase bird. Click here to learn more.
23 |
24 |
25 |
26 |
28 | How do I purchase Bird ?
29 |
30 | It is possible to purchase bird. Click here to learn more.
31 |
32 |
33 |
34 |
36 | How do I purchase Bird ?
37 |
38 | It is possible to purchase bird. Click here to learn more.
39 |
40 |
41 |
42 |
44 | How do I purchase Bird ?
45 |
46 | It is possible to purchase bird. Click here to learn more.
47 |
48 |
49 |
50 |
52 | How do I purchase Bird ?
53 |
54 | It is possible to purchase bird. Click here to learn more.
55 |
56 |
57 |
58 |
);
59 | }
60 |
61 | export default FAQS;
--------------------------------------------------------------------------------
/app/bird-ai/_components/first-section.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useEffect } from "react";
4 |
5 | const FirstSection = () => {
6 | return (
7 |
8 |
9 |
10 | Introducing Bird AI
11 |
12 |
25 | Record better presentations, faster feedback, and smoother hand-offs
26 | with Bird Ai. So you can be more productive, wherever you work.
27 |
28 |
29 |
56 |
57 |
58 |
69 |
70 |
71 |
72 |
73 |
74 | );
75 | };
76 |
77 | export default FirstSection;
78 |
--------------------------------------------------------------------------------
/app/bird-ai/_components/fourth-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const FourthSection = () => {
4 | return (
5 |
6 |
7 |
14 |
21 |
22 |
23 |
24 |
25 |
26 | Filler word removal
27 |
28 |
29 | From Google Workspace to Slack, Bird videos seamlessly integrate
30 | with hundreds of tools you use every day.
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Silence removal
42 |
43 |
44 |
45 | From Google Workspace to Slack, Bird videos seamlessly integrate
46 | with hundreds of tools you use every day.
47 |
48 |
49 |
50 |
51 |
52 |
53 |
60 |
61 |
62 |
63 |
64 | );
65 | };
66 |
67 | export default FourthSection;
68 |
--------------------------------------------------------------------------------
/app/bird-ai/_components/third-section.tsx:
--------------------------------------------------------------------------------
1 | const ThirdSection = () => {
2 | return (
3 |
4 |
5 |
18 | Make your first take your best take
19 |
20 |
21 |
49 |
50 |
51 |
);
52 | }
53 |
54 | export default ThirdSection;
--------------------------------------------------------------------------------
/app/bird-ai/page.tsx:
--------------------------------------------------------------------------------
1 | import Navbar from "@/components/ui/navbar/navbar";
2 | import FirstSection from "./_components/first-section";
3 | import SecondSection from "./_components/second-section";
4 | import ThirdSection from "./_components/third-section";
5 | import FourthSection from "./_components/fourth-section";
6 | import FAQS from "./_components/faqs";
7 | import Testimonials from "./_components/testimonials";
8 | import BottomCard from "@/components/ui/bottom-card";
9 | import BottomSection from "@/components/ui/bottom-section";
10 | import Footer from "@/components/ui/footer";
11 |
12 | const BirdAi = () => {
13 | return (
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
);
26 | }
27 |
28 | export default BirdAi;
--------------------------------------------------------------------------------
/app/contact/page.tsx:
--------------------------------------------------------------------------------
1 | import Navbar from "@/components/ui/navbar/navbar";
2 | import ContactForm from "./_components/first-section";
3 |
4 | const Contact = () => {
5 | return (
6 |
7 |
8 |
);
9 | }
10 |
11 | export default Contact;
--------------------------------------------------------------------------------
/app/engineering/_components/features.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | Lock,
3 | MessageCircle,
4 | MousePointerSquare,
5 | PencilLine,
6 | } from "lucide-react";
7 |
8 | const Features = () => {
9 | return (
10 |
11 |
12 | Features
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
Calls - to - action
23 |
24 |
25 | Add links to design files and other resources for viewers to
26 | reference
27 |
28 |
29 |
30 |
31 |
32 |
33 |
36 |
Drawing Tools
37 |
38 |
39 | Emphasize mouse clicks and draw on your screen as you record
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
Rich reactions
50 |
51 |
52 | Add links to design files and other resources for viewers to
53 | reference
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
Content security
64 |
65 |
66 | Restrict viewing by email address and add password protection.
67 |
68 |
69 |
70 |
71 |
72 |
73 | );
74 | };
75 |
76 | export default Features;
77 |
--------------------------------------------------------------------------------
/app/engineering/_components/fifth-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const FifthSection = () => {
4 | return (
5 |
6 |
7 |
8 |
9 |
10 |
11 |
23 |
24 |
25 |
26 |
27 |
28 | Get your message across
29 |
30 |
31 | Bird helps you develop and build close connections to your
32 | team so you can do your best work together.
33 |
34 |
35 |
36 |
37 |
38 | Share ideas in high resolution
39 |
40 |
41 | Speak to your vision while sharing your design as you record
42 | your screen, camera, or both with Bird.
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | Add context to your concept
51 |
52 |
53 | Use video to document the thinking behind your ideas
54 | and loop in the right people at the right time, with the right context.
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | );
68 | };
69 |
70 | export default FifthSection;
71 |
--------------------------------------------------------------------------------
/app/engineering/_components/first-section.tsx:
--------------------------------------------------------------------------------
1 | import { Check, Download } from "lucide-react";
2 |
3 | const FirstSection = () => {
4 | return (
5 |
6 |
7 |
8 | Bird for Team Alignment
9 |
10 |
11 | Move fast and stay connected
12 |
13 |
25 | Use Bird to record asynchronous videos that help your team stay
26 | aligned and move faster.
27 |
28 |
29 |
30 |
31 |
53 |
54 |
55 |
Get bird for free
56 |
57 |
58 |
59 |
60 |
61 |
62 |
76 |
77 |
78 |
79 |
80 |
81 | Why Teams Align with Bird
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
To record presentations
94 |
95 |
96 |
97 |
98 |
99 |
100 |
To deliver better feedback
101 |
102 |
103 |
104 |
105 |
106 |
107 |
To share knowledge
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | );
116 | };
117 |
118 | export default FirstSection;
119 |
--------------------------------------------------------------------------------
/app/engineering/_components/fourth-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const FourthSection = () => {
4 | return (
5 |
6 |
7 |
8 | Accelerate the flow of information
9 |
10 |
11 |
12 | Deliver detailed information up to 2x faster than it takes to present it.
13 |
14 |
15 |
16 |
17 |
32 |
33 |
34 |
35 |
36 |
37 |
);
38 | }
39 |
40 | export default FourthSection;
--------------------------------------------------------------------------------
/app/engineering/_components/quote.tsx:
--------------------------------------------------------------------------------
1 |
2 | import Image from "next/image";
3 |
4 | const Quote = () => {
5 | return (
6 |
7 |
17 |
18 |
27 |
28 |
29 | "Bird allows me to connect more personally with people
30 | without having to do 75 different one-on-one calls, which is just
31 | impossible at scale."
32 |
33 |
34 |
35 |
36 |
37 |
Alex Berman
38 |
Chief Marketing Officer
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
);
48 | }
49 |
50 | export default Quote;
--------------------------------------------------------------------------------
/app/engineering/_components/slider.tsx:
--------------------------------------------------------------------------------
1 | import SliderOne from "@/app/(landing-page)/_components/slider/_components/slider-one";
2 |
3 | import { Download } from "lucide-react";
4 |
5 | const Slider = () => {
6 | return (
7 |
8 |
9 | More than 21 million people across 120,000 companies choose Bird
10 |
11 |
12 |
13 |
35 |
36 |
37 |
Get Bird for free
38 |
39 |
40 |
41 |
42 |
43 |
44 | );
45 | };
46 |
47 | export default Slider;
48 |
--------------------------------------------------------------------------------
/app/engineering/_components/third-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 |
4 | const ThirdSection = () => {
5 | return (
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Get your message across
14 |
15 |
16 | Keep everyone on track and in the loop using streamlined
17 | communication that scales.
18 |
19 |
20 |
21 |
22 |
23 | Share ideas in high resolution
24 |
25 |
26 | Speak to your vision while sharing your design as you record
27 | your screen, camera or both with Bird.
28 |
29 |
30 |
31 |
32 |
33 | Add context to your concept
34 |
35 |
36 | Use video to document the thinking behind your ideas and loop
37 | in the right people at the right time, with the right context.
38 |
39 |
40 |
41 |
42 |
43 | Send your video with a link
44 |
45 |
46 | Use Bird's instantly-generated links to share your video in
47 | Slack, Figma, Sketch, and anywhere else your team works.
48 |
49 |
50 |
51 |
52 |
53 |
54 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | );
74 | };
75 |
76 | export default ThirdSection;
77 |
--------------------------------------------------------------------------------
/app/engineering/page.tsx:
--------------------------------------------------------------------------------
1 | import Navbar from "@/components/ui/navbar/navbar";
2 | import FirstSection from "./_components/first-section";
3 | import SecondSection from "./_components/second-section";
4 | import ThirdSection from "./_components/third-section";
5 | import FourthSection from "./_components/fourth-section";
6 | import Features from "./_components/features";
7 | import FifthSection from "./_components/fifth-section";
8 | import Quote from "./_components/quote";
9 | import Explore from "./_components/explore";
10 | import Slider from "./_components/slider";
11 | import TenthSection from "../(landing-page)/_components/tenth-section";
12 | import BottomCard from "@/components/ui/bottom-card";
13 | import BottomSection from "@/components/ui/bottom-section";
14 | import Footer from "@/components/ui/footer";
15 |
16 | const TeamAlignment = () => {
17 | return (
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | );
42 | }
43 |
44 | export default TeamAlignment;
--------------------------------------------------------------------------------
/app/enterprise/_components/bottom-card-blue.tsx:
--------------------------------------------------------------------------------
1 | import { Download } from "lucide-react";
2 |
3 | const BottomCardBlue = () => {
4 | return (
5 |
6 |
7 |
8 | Bird works wherever you do.
9 |
10 |
11 |
32 |
33 |
34 |
Get bird for free
35 |
36 |
37 |
38 |
39 |
40 | );
41 | };
42 |
43 | export default BottomCardBlue;
44 |
--------------------------------------------------------------------------------
/app/enterprise/_components/eighth-section.tsx:
--------------------------------------------------------------------------------
1 | import { Link, PlayCircle, Zap } from "lucide-react";
2 |
3 | const EighthSection = () => {
4 | return (
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | Bird meets your teams where they're at
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
Team Updates
25 |
26 |
27 | Send a pitch video screen capture to showcase a product or service
28 | and keep yourself
29 | front and center with a picture-in-picture presentation format.
30 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
Team Updates
40 |
41 |
42 | Send a pitch video screen capture to showcase a product or service
43 | and keep yourself
44 | front and center with a picture-in-picture presentation format.
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
Team Updates
55 |
56 |
57 | Send a pitch video screen capture to showcase a product or service
58 | and keep yourself
59 | front and center with a picture-in-picture presentation format.
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | );
69 | };
70 |
71 | export default EighthSection;
72 |
--------------------------------------------------------------------------------
/app/enterprise/_components/fifth-section.tsx:
--------------------------------------------------------------------------------
1 | import { Check } from "lucide-react";
2 |
3 | const FifthSection = () => {
4 | return (
5 |
6 |
16 |
27 | Enterprise-grade data protection
28 |
29 |
30 |
31 | Bird protects any and all data on our platform, so you can communicate
32 | with confidence.
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | Secured with encrypted data and industry-standard security frameworks
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | Secured with encrypted data and industry-standard security frameworks
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | Secured with encrypted data and industry-standard security frameworks
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | Secured with encrypted data and industry-standard security frameworks
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | );
82 | };
83 |
84 | export default FifthSection;
85 |
--------------------------------------------------------------------------------
/app/enterprise/_components/first-section.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { MessageCircle } from "lucide-react";
3 |
4 | const FirstSection = () => {
5 | return (
6 |
7 |
15 |
25 | Companies work smarter with Bird
26 |
27 |
36 | Bird's enterprise-grade platform lets
37 | organizations securely communicate using async video.
38 |
39 |
40 |
53 |
54 |
Contact Sales
55 |
56 |
57 |
58 |
69 |
70 |
71 |
72 |
73 |
74 |
);
75 | }
76 |
77 | export default FirstSection;
--------------------------------------------------------------------------------
/app/enterprise/_components/fourth-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const FourthSection = () => {
4 | return (
5 |
6 |
7 |
8 | Drive community and engagement at scale
9 |
10 |
11 |
21 |
22 |
33 |
34 |
45 |
46 |
47 |
48 |
49 |
61 |
62 |
63 | Scale knowledge with video
64 |
65 |
66 | Connect pockets of institutional knowledge by making
67 | video messages searchable and discoverable.
68 |
69 |
70 |
71 |
72 |
73 | Create a culture of sharing
74 |
75 |
76 | Video messaging encourages your team to share early and often
77 | so projects are visible and driven to completion quicker.
78 |
79 |
80 |
81 |
82 |
83 | Build community at scale
84 |
85 |
86 | Magnify people's voices so the whole company
87 | can feel connected and heard beyond the boundaries of their team.
88 |
89 |
90 |
91 |
92 |
);
93 | }
94 |
95 | export default FourthSection;
--------------------------------------------------------------------------------
/app/enterprise/_components/quote.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const Quote = () => {
4 | return (
5 |
6 | <>
7 |
21 |
22 |
31 |
32 |
33 | "Bird allows me to connect more personally with people
34 | without having to do 75 different one-on-one calls, which is just
35 | impossible at scale."
36 |
37 |
38 |
39 |
40 |
52 |
53 |
54 |
Alex Berman
55 |
Chief Marketing Officer
56 |
57 |
58 |
59 | >
60 |
);
61 | }
62 |
63 | export default Quote;
--------------------------------------------------------------------------------
/app/enterprise/_components/second-section.tsx:
--------------------------------------------------------------------------------
1 | import SliderOne from "@/app/(landing-page)/_components/slider/_components/slider-one";
2 | import SliderTwo from "@/app/(landing-page)/_components/slider/_components/slider-second";
3 |
4 | const SecondSection = () => {
5 | return (
6 |
7 |
8 |
9 |
22 | Thousands of leading enterprise teams use Bird
23 |
24 |
25 |
26 |
27 |
28 |
29 |
);
30 | }
31 |
32 | export default SecondSection;
--------------------------------------------------------------------------------
/app/enterprise/_components/seventh-section.tsx:
--------------------------------------------------------------------------------
1 | import { ArrowDown, ArrowUp } from 'lucide-react';
2 | import Image from 'next/image';
3 |
4 | const SeventhSection = () => {
5 | return (
6 |
15 |
16 |
17 |
18 |
19 |
20 |
23 |
24 | 50%
25 |
26 |
27 |
28 |
29 |
30 | fewer meetings
31 |
32 |
33 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
52 |
53 | 50%
54 |
55 |
56 |
57 |
58 |
59 | Increase in productivity
60 |
61 |
62 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
81 |
82 | 24%
83 |
84 |
85 |
86 |
87 |
88 | Cost savings
89 |
90 |
91 |
92 |
101 |
102 |
103 |
104 |
);
105 | }
106 |
107 | export default SeventhSection;
--------------------------------------------------------------------------------
/app/enterprise/_components/sixth-section.tsx:
--------------------------------------------------------------------------------
1 | const SixthSection = () => {
2 | return (
3 |
4 |
5 |
6 | Use Bird for all types of communication
7 |
8 |
9 |
10 | Bird protects any and all data on our platform, so you can communicate
11 | with confidence.
12 |
13 |
14 |
25 |
26 |
27 |
28 |
29 |
36 |
51 | Announce Projects Sales Videos Projects Videos Marketing Videos
52 | Culture Important Messages Talks and Presentations Plan Brainstorm
53 | Explanations Explore New Ideas Journal Entries React to News and
54 | Events Share Knowledge Share Ideas Collab
55 |
56 |
57 |
58 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | );
77 | };
78 |
79 | export default SixthSection;
80 |
--------------------------------------------------------------------------------
/app/enterprise/_components/third-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const ThirdSection = () => {
4 | return (
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | Communicate faster with async video
13 |
14 |
15 | Async video helps organizations communicate faster & build culture
16 |
17 |
18 |
19 |
20 |
21 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | Save time
41 |
42 |
43 | Teams can communicate more efficiently without typing long emails,
44 | scheduling meetings, or trying to work across time zones.
45 |
46 |
47 |
48 |
49 |
50 |
51 | Communicate clearly
52 |
53 |
54 | Async video captures context, tone, and personality in detail.
55 | Distributed teams can preserve the true meaning of their message.
56 |
57 |
58 |
59 |
60 |
61 |
62 | Deepen culture
63 |
64 |
65 | Make it effortless for anyone in your organization to share ideas,
66 | introduce themselves,
67 | and build community with fellow teammates using async video.
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | );
77 | };
78 |
79 | export default ThirdSection;
80 |
--------------------------------------------------------------------------------
/app/enterprise/page.tsx:
--------------------------------------------------------------------------------
1 | import Navbar from "@/components/ui/navbar/navbar";
2 | import FirstSection from "./_components/first-section";
3 | import SecondSection from "./_components/second-section";
4 | import ThirdSection from "./_components/third-section";
5 | import FourthSection from "./_components/fourth-section";
6 | import Quote from "./_components/quote";
7 | import FifthSection from "./_components/fifth-section";
8 | import SixthSection from "./_components/sixth-section";
9 | import SeventhSection from "./_components/seventh-section";
10 | import EighthSection from "./_components/eighth-section";
11 | import NinthSection from "./_components/ninth-section";
12 | import TenthSection from "./_components/testimonials";
13 | import BottomCard from "@/components/ui/bottom-card";
14 | import BottomSection from "@/components/ui/bottom-section";
15 | import Footer from "@/components/ui/footer";
16 | import BottomCardBlue from "./_components/bottom-card-blue";
17 |
18 |
19 | const Enterprise = () => {
20 | return (
21 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
);
46 | }
47 |
48 | export default Enterprise;
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iggy-tech/loom-clone-video/140e21b60e0944f3978f5e8bb373bda7ce91a590/app/favicon.ico
--------------------------------------------------------------------------------
/app/free/page.tsx:
--------------------------------------------------------------------------------
1 |
2 | import Link from "next/link";
3 | import Image from "next/image";
4 |
5 | const Free = () => {
6 | return (
7 |
8 |
11 |
12 |
13 |
14 |
15 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | Record your first Bird in Seconds
31 |
32 |
33 |
34 |
44 |
45 | Sign in with Google
46 |
47 |
48 |
49 |
50 |
55 |
56 |
57 |
Work Email
58 |
76 |
77 |
78 |
79 |
80 |
92 | Continue
93 |
94 |
95 |
96 | By signing up, you ackowledge that you have read
97 | and agree to Bird's Terms of Service and Privacy Policy.
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
);
111 | }
112 |
113 | export default Free;
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | html,
4 | body,
5 | :root {
6 | height: 100%;
7 | overflow-x: hidden
8 | }
9 |
10 |
11 | @tailwind base;
12 | @tailwind components;
13 | @tailwind utilities;
14 |
15 | @layer base {
16 | :root {
17 | --background: 0 0% 100%;
18 | --foreground: 222.2 84% 4.9%;
19 |
20 | --card: 0 0% 100%;
21 | --card-foreground: 222.2 84% 4.9%;
22 |
23 | --popover: 0 0% 100%;
24 | --popover-foreground: 222.2 84% 4.9%;
25 |
26 | --primary: 222.2 47.4% 11.2%;
27 | --primary-foreground: 210 40% 98%;
28 |
29 | --secondary: 210 40% 96.1%;
30 | --secondary-foreground: 222.2 47.4% 11.2%;
31 |
32 | --muted: 210 40% 96.1%;
33 | --muted-foreground: 215.4 16.3% 46.9%;
34 |
35 | --accent: 210 40% 96.1%;
36 | --accent-foreground: 222.2 47.4% 11.2%;
37 |
38 | --destructive: 0 84.2% 60.2%;
39 | --destructive-foreground: 210 40% 98%;
40 |
41 | --border: 214.3 31.8% 91.4%;
42 | --input: 214.3 31.8% 91.4%;
43 | --ring: 222.2 84% 4.9%;
44 |
45 | --radius: 0.5rem;
46 | }
47 |
48 | .dark {
49 | --background: 222.2 84% 4.9%;
50 | --foreground: 210 40% 98%;
51 |
52 | --card: 222.2 84% 4.9%;
53 | --card-foreground: 210 40% 98%;
54 |
55 | --popover: 222.2 84% 4.9%;
56 | --popover-foreground: 210 40% 98%;
57 |
58 | --primary: 210 40% 98%;
59 | --primary-foreground: 222.2 47.4% 11.2%;
60 |
61 | --secondary: 217.2 32.6% 17.5%;
62 | --secondary-foreground: 210 40% 98%;
63 |
64 | --muted: 217.2 32.6% 17.5%;
65 | --muted-foreground: 215 20.2% 65.1%;
66 |
67 | --accent: 217.2 32.6% 17.5%;
68 | --accent-foreground: 210 40% 98%;
69 |
70 | --destructive: 0 62.8% 30.6%;
71 | --destructive-foreground: 210 40% 98%;
72 |
73 | --border: 217.2 32.6% 17.5%;
74 | --input: 217.2 32.6% 17.5%;
75 | --ring: 212.7 26.8% 83.9%;
76 | }
77 | }
78 |
79 | @layer base {
80 | * {
81 | @apply border-border;
82 | }
83 | body {
84 | @apply bg-background text-foreground;
85 | }
86 | }
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import type { Metadata } from 'next'
2 | import { Outfit } from 'next/font/google'
3 | import './globals.css'
4 |
5 | const font = Outfit({ subsets: ['latin'] })
6 |
7 | export const metadata: Metadata = {
8 | title: 'Create Next App',
9 | description: 'Generated by create next app',
10 | }
11 |
12 | export default function RootLayout({
13 | children,
14 | }: {
15 | children: React.ReactNode
16 | }) {
17 | return (
18 |
19 | {children}
20 |
21 | )
22 | }
23 |
--------------------------------------------------------------------------------
/app/pricing/page.tsx:
--------------------------------------------------------------------------------
1 | import Navbar from "@/components/ui/navbar/navbar";
2 | import FirstSection from "./_components/first-section";
3 | import SecondSection from "../(landing-page)/_components/second-section";
4 | import Testimonials from "../bird-ai/_components/testimonials";
5 | import BottomCard from "@/components/ui/bottom-card";
6 | import BottomSection from "@/components/ui/bottom-section";
7 | import Footer from "@/components/ui/footer";
8 |
9 | const Pricing = () => {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
);
20 | }
21 |
22 | export default Pricing;
--------------------------------------------------------------------------------
/app/sales/_components/features.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | Lock,
3 | MessageCircle,
4 | MousePointerSquare,
5 | PencilLine,
6 | } from "lucide-react";
7 |
8 | const Features = () => {
9 | return (
10 |
11 |
12 | Features
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
Calls - to - action
23 |
24 |
25 | Add links to design files and other resources for viewers to
26 | reference
27 |
28 |
29 |
30 |
31 |
32 |
33 |
36 |
Drawing Tools
37 |
38 |
39 | Emphasize mouse clicks and draw on your screen as you record
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
Rich reactions
50 |
51 |
52 | Add links to design files and other resources for viewers to
53 | reference
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
Content security
64 |
65 |
66 | Restrict viewing by email address and add password protection.
67 |
68 |
69 |
70 |
71 |
72 |
73 | );
74 | };
75 |
76 | export default Features;
77 |
--------------------------------------------------------------------------------
/app/sales/_components/fifth-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const FifthSection = () => {
4 | return (
5 |
6 |
7 |
8 |
9 |
10 |
11 |
23 |
24 |
25 |
26 |
27 |
28 | Get your message across
29 |
30 |
31 | Bird helps you develop and build close connections to your
32 | team so you can do your best work together.
33 |
34 |
35 |
36 |
37 |
38 | Share ideas in high resolution
39 |
40 |
41 | Speak to your vision while sharing your design as you record
42 | your screen, camera, or both with Bird.
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | Add context to your concept
51 |
52 |
53 | Use video to document the thinking behind your ideas
54 | and loop in the right people at the right time, with the right context.
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | );
68 | };
69 |
70 | export default FifthSection;
71 |
--------------------------------------------------------------------------------
/app/sales/_components/first-section.tsx:
--------------------------------------------------------------------------------
1 | import { Check, Download } from "lucide-react";
2 |
3 | const FirstSection = () => {
4 | return (
5 |
6 |
7 |
8 | Bird for Team Alignment
9 |
10 |
11 | Move fast and stay connected
12 |
13 |
25 | Use Bird to record asynchronous videos that help your team stay
26 | aligned and move faster.
27 |
28 |
29 |
30 |
31 |
53 |
54 |
55 |
Get bird for free
56 |
57 |
58 |
59 |
60 |
61 |
62 |
76 |
77 |
78 |
79 |
80 |
81 | Why Teams Align with Bird
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
To record presentations
94 |
95 |
96 |
97 |
98 |
99 |
100 |
To deliver better feedback
101 |
102 |
103 |
104 |
105 |
106 |
107 |
To share knowledge
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | );
116 | };
117 |
118 | export default FirstSection;
119 |
--------------------------------------------------------------------------------
/app/sales/_components/fourth-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const FourthSection = () => {
4 | return (
5 |
6 |
7 |
8 | Accelerate the flow of information
9 |
10 |
11 |
12 | Deliver detailed information up to 2x faster than it takes to present it.
13 |
14 |
15 |
16 |
17 |
32 |
33 |
34 |
35 |
36 |
37 |
);
38 | }
39 |
40 | export default FourthSection;
--------------------------------------------------------------------------------
/app/sales/_components/quote.tsx:
--------------------------------------------------------------------------------
1 |
2 | import Image from "next/image";
3 |
4 | const Quote = () => {
5 | return (
6 |
7 |
17 |
18 |
27 |
28 |
29 | "Bird allows me to connect more personally with people
30 | without having to do 75 different one-on-one calls, which is just
31 | impossible at scale."
32 |
33 |
34 |
35 |
36 |
37 |
Alex Berman
38 |
Chief Marketing Officer
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
);
48 | }
49 |
50 | export default Quote;
--------------------------------------------------------------------------------
/app/sales/_components/slider.tsx:
--------------------------------------------------------------------------------
1 | import SliderOne from "@/app/(landing-page)/_components/slider/_components/slider-one";
2 |
3 | import { Download } from "lucide-react";
4 |
5 | const Slider = () => {
6 | return (
7 |
8 |
9 | More than 21 million people across 120,000 companies choose Bird
10 |
11 |
12 |
13 |
35 |
36 |
37 |
Get Bird for free
38 |
39 |
40 |
41 |
42 |
43 |
44 | );
45 | };
46 |
47 | export default Slider;
48 |
--------------------------------------------------------------------------------
/app/sales/_components/third-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 |
4 | const ThirdSection = () => {
5 | return (
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Get your message across
14 |
15 |
16 | Keep everyone on track and in the loop using streamlined
17 | communication that scales.
18 |
19 |
20 |
21 |
22 |
23 | Share ideas in high resolution
24 |
25 |
26 | Speak to your vision while sharing your design as you record
27 | your screen, camera or both with Bird.
28 |
29 |
30 |
31 |
32 |
33 | Add context to your concept
34 |
35 |
36 | Use video to document the thinking behind your ideas and loop
37 | in the right people at the right time, with the right context.
38 |
39 |
40 |
41 |
42 |
43 | Send your video with a link
44 |
45 |
46 | Use Bird's instantly-generated links to share your video in
47 | Slack, Figma, Sketch, and anywhere else your team works.
48 |
49 |
50 |
51 |
52 |
53 |
54 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | );
74 | };
75 |
76 | export default ThirdSection;
77 |
--------------------------------------------------------------------------------
/app/sales/page.tsx:
--------------------------------------------------------------------------------
1 | import Navbar from "@/components/ui/navbar/navbar";
2 | import FirstSection from "./_components/first-section";
3 | import SecondSection from "./_components/second-section";
4 | import ThirdSection from "./_components/third-section";
5 | import FourthSection from "./_components/fourth-section";
6 | import Features from "./_components/features";
7 | import FifthSection from "./_components/fifth-section";
8 | import Quote from "./_components/quote";
9 | import Explore from "./_components/explore";
10 | import Slider from "./_components/slider";
11 | import TenthSection from "../(landing-page)/_components/tenth-section";
12 | import BottomCard from "@/components/ui/bottom-card";
13 | import BottomSection from "@/components/ui/bottom-section";
14 | import Footer from "@/components/ui/footer";
15 |
16 | const TeamAlignment = () => {
17 | return (
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | );
42 | }
43 |
44 | export default TeamAlignment;
--------------------------------------------------------------------------------
/app/screen-recorder/_components/faqs.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | Accordion,
3 | AccordionContent,
4 | AccordionItem,
5 | AccordionTrigger
6 | } from '@/components/ui/accordion'
7 |
8 | const FAQS = () => {
9 | return (
10 |
11 |
12 | Screen Recorder FAQS
13 |
14 |
18 |
20 | How do I purchase Bird ?
21 |
22 | It is possible to purchase bird. Click here to learn more.
23 |
24 |
25 |
26 |
28 | How do I purchase Bird ?
29 |
30 | It is possible to purchase bird. Click here to learn more.
31 |
32 |
33 |
34 |
36 | How do I purchase Bird ?
37 |
38 | It is possible to purchase bird. Click here to learn more.
39 |
40 |
41 |
42 |
44 | How do I purchase Bird ?
45 |
46 | It is possible to purchase bird. Click here to learn more.
47 |
48 |
49 |
50 |
52 | How do I purchase Bird ?
53 |
54 | It is possible to purchase bird. Click here to learn more.
55 |
56 |
57 |
58 |
);
59 | }
60 |
61 | export default FAQS;
--------------------------------------------------------------------------------
/app/screen-recorder/_components/feedback-section.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { emojisplosions } from 'emojisplosion'
4 |
5 | const FeedbackSection = () => {
6 |
7 | const handleEmojiClick = () => {
8 | const { cancel } = emojisplosions({
9 | emojis: ["👍"]
10 | })
11 | setTimeout(cancel, 500)
12 | }
13 |
14 | const handleEmojiClick2 = () => {
15 | const { cancel } = emojisplosions({
16 | emojis: ["😁"]
17 | })
18 | setTimeout(cancel, 500)
19 | }
20 |
21 | const handleEmojiClick3 = () => {
22 | const { cancel } = emojisplosions({
23 | emojis: ["😍"]
24 | })
25 | setTimeout(cancel, 500)
26 | }
27 |
28 | const handleEmojiClick4 = () => {
29 | const { cancel } = emojisplosions({
30 | emojis: ["🤩"]
31 | })
32 | setTimeout(cancel, 500)
33 | }
34 | const handleEmojiClick5 = () => {
35 | const { cancel } = emojisplosions({
36 | emojis: ["🚀"]
37 | })
38 | setTimeout(cancel, 500)
39 | }
40 |
41 | const handleEmojiClick6 = () => {
42 | const { cancel } = emojisplosions({
43 | emojis: ["😡"]
44 | })
45 | setTimeout(cancel, 500)
46 | }
47 |
48 |
49 | return (
50 |
51 |
52 |
53 |
54 | Provide Fun Feedback
55 |
56 |
57 | Offer feedback on a project using a quick video commentary or create a
58 | one-on-one session for personal attention and encouragement from anywhere.
59 |
60 |
61 |
62 |
63 |
68 |
69 |
74 |
75 |
80 |
81 |
86 |
87 |
92 |
93 |
98 |
99 |
100 |
);
101 | }
102 |
103 | export default FeedbackSection;
--------------------------------------------------------------------------------
/app/screen-recorder/_components/first-section.tsx:
--------------------------------------------------------------------------------
1 |
2 |
3 | import { Button } from "@/components/ui/button";
4 | import { Chrome, Download } from "lucide-react";
5 |
6 | const FirstSection = () => {
7 | return (
8 |
9 |
10 |
19 | The Bird Free Screen Recorder
20 |
21 |
30 | Create, edit, notate, and share videos with anyone
31 | using the best screen recorder available. Bird lets
32 | anyone create and share virtually any message quickly and professionally.
33 |
34 |
35 |
36 |
37 |
54 |
55 | Download to chrome
56 |
57 |
58 |
77 |
78 | Get Bird for Free
79 |
80 |
81 |
82 |
83 |
84 |
95 |
96 |
97 |
98 |
99 |
100 |
);
101 | }
102 |
103 | export default FirstSection;
--------------------------------------------------------------------------------
/app/screen-recorder/_components/phone-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | import { Button } from "@/components/ui/button";
4 |
5 | const PhoneSection = () => {
6 | return (
7 |
8 |
9 |
10 |
23 |
24 |
25 | Bird for iOS and Android
26 |
27 |
28 | Bird is available for iOS devices (iOS version 15+),
29 | and Android devices (8.0 Oreo and above). On both devices,
30 | you can easily record your screen and voice.
31 | Simply download the Bird screen recorder app for your device.
32 |
33 |
34 |
53 | Download Now
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
);
62 | }
63 |
64 | export default PhoneSection;
--------------------------------------------------------------------------------
/app/screen-recorder/_components/third-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const ThirdSection = () => {
4 | return (
5 |
6 |
7 | Capture edit and share
8 |
9 |
10 |
11 |
12 |
13 |
14 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Filler word removal
28 |
29 |
30 | From Google Workspace to Slack, Bird videos seamlessly
31 | integrate with hundreds of tools you use every day.
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | Silence removal
44 |
45 |
46 |
47 | From Google Workspace to Slack, Bird videos seamlessly
48 | integrate with hundreds of tools you use every day.
49 |
50 |
51 |
52 |
53 |
54 |
55 |
62 |
63 |
64 |
65 |
66 |
67 | );
68 | };
69 |
70 | export default ThirdSection;
71 |
--------------------------------------------------------------------------------
/app/screen-recorder/page.tsx:
--------------------------------------------------------------------------------
1 | import Navbar from "@/components/ui/navbar/navbar";
2 | import FirstSection from "./_components/first-section";
3 | import SecondSection from "./_components/second-section";
4 | import ThirdSection from "./_components/third-section";
5 | import FeedbackSection from "./_components/feedback-section";
6 | import Slider from "../team-alignment/_components/slider";
7 |
8 | import Testimonials from "../bird-ai/_components/testimonials";
9 | import FourthSection from "./_components/fourth-section";
10 | import FAQS from "./_components/faqs";
11 | import PhoneSection from "./_components/phone-section";
12 | import BottomCard from "@/components/ui/bottom-card";
13 | import BottomSection from "@/components/ui/bottom-section";
14 | import Footer from "@/components/ui/footer";
15 |
16 | const ScreenRecorder = () => {
17 | return (
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
);
34 | }
35 |
36 | export default ScreenRecorder;
--------------------------------------------------------------------------------
/app/sign-in/page.tsx:
--------------------------------------------------------------------------------
1 | import Navbar from "@/components/ui/navbar/navbar";
2 | import FirstSection from "./_components/first-section";
3 |
4 | const SignIn = () => {
5 | return (
6 |
7 |
8 |
9 |
);
10 | }
11 |
12 | export default SignIn;
--------------------------------------------------------------------------------
/app/team-alignment/_components/features.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | Lock,
3 | MessageCircle,
4 | MousePointerSquare,
5 | PencilLine,
6 | } from "lucide-react";
7 |
8 | const Features = () => {
9 | return (
10 |
11 |
12 | Features
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
Calls - to - action
23 |
24 |
25 | Add links to design files and other resources for viewers to
26 | reference
27 |
28 |
29 |
30 |
31 |
32 |
33 |
36 |
Drawing Tools
37 |
38 |
39 | Emphasize mouse clicks and draw on your screen as you record
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
Rich reactions
50 |
51 |
52 | Add links to design files and other resources for viewers to
53 | reference
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
Content security
64 |
65 |
66 | Restrict viewing by email address and add password protection.
67 |
68 |
69 |
70 |
71 |
72 |
73 | );
74 | };
75 |
76 | export default Features;
77 |
--------------------------------------------------------------------------------
/app/team-alignment/_components/fifth-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const FifthSection = () => {
4 | return (
5 |
6 |
7 |
8 |
9 |
10 |
11 |
23 |
24 |
25 |
26 |
27 |
28 | Get your message across
29 |
30 |
31 | Bird helps you develop and build close connections to your
32 | team so you can do your best work together.
33 |
34 |
35 |
36 |
37 |
38 | Share ideas in high resolution
39 |
40 |
41 | Speak to your vision while sharing your design as you record
42 | your screen, camera, or both with Bird.
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | Add context to your concept
51 |
52 |
53 | Use video to document the thinking behind your ideas
54 | and loop in the right people at the right time, with the right context.
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | );
68 | };
69 |
70 | export default FifthSection;
71 |
--------------------------------------------------------------------------------
/app/team-alignment/_components/fourth-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const FourthSection = () => {
4 | return (
5 |
6 |
7 |
8 | Accelerate the flow of information
9 |
10 |
11 |
12 | Deliver detailed information up to 2x faster than it takes to present it.
13 |
14 |
15 |
16 |
17 |
32 |
33 |
34 |
35 |
36 |
37 |
);
38 | }
39 |
40 | export default FourthSection;
--------------------------------------------------------------------------------
/app/team-alignment/_components/quote.tsx:
--------------------------------------------------------------------------------
1 |
2 | import Image from "next/image";
3 |
4 | const Quote = () => {
5 | return (
6 |
7 |
17 |
18 |
27 |
28 |
29 | "Bird allows me to connect more personally with people
30 | without having to do 75 different one-on-one calls, which is just
31 | impossible at scale."
32 |
33 |
34 |
35 |
36 |
37 |
Alex Berman
38 |
Chief Marketing Officer
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
);
48 | }
49 |
50 | export default Quote;
--------------------------------------------------------------------------------
/app/team-alignment/_components/slider.tsx:
--------------------------------------------------------------------------------
1 | import SliderOne from "@/app/(landing-page)/_components/slider/_components/slider-one";
2 |
3 | import { Download } from "lucide-react";
4 |
5 | const Slider = () => {
6 | return (
7 |
8 |
9 | More than 21 million people across 120,000 companies choose Bird
10 |
11 |
12 |
13 |
35 |
36 |
37 |
Get Bird for free
38 |
39 |
40 |
41 |
42 |
43 |
44 | );
45 | };
46 |
47 | export default Slider;
48 |
--------------------------------------------------------------------------------
/app/team-alignment/_components/third-section.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 |
4 | const ThirdSection = () => {
5 | return (
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Get your message across
14 |
15 |
16 | Keep everyone on track and in the loop using streamlined
17 | communication that scales.
18 |
19 |
20 |
21 |
22 |
23 | Share ideas in high resolution
24 |
25 |
26 | Speak to your vision while sharing your design as you record
27 | your screen, camera or both with Bird.
28 |
29 |
30 |
31 |
32 |
33 | Add context to your concept
34 |
35 |
36 | Use video to document the thinking behind your ideas and loop
37 | in the right people at the right time, with the right context.
38 |
39 |
40 |
41 |
42 |
43 | Send your video with a link
44 |
45 |
46 | Use Bird's instantly-generated links to share your video in
47 | Slack, Figma, Sketch, and anywhere else your team works.
48 |
49 |
50 |
51 |
52 |
53 |
54 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | );
74 | };
75 |
76 | export default ThirdSection;
77 |
--------------------------------------------------------------------------------
/app/team-alignment/page.tsx:
--------------------------------------------------------------------------------
1 | import Navbar from "@/components/ui/navbar/navbar";
2 | import FirstSection from "./_components/first-section";
3 | import SecondSection from "./_components/second-section";
4 | import ThirdSection from "./_components/third-section";
5 | import FourthSection from "./_components/fourth-section";
6 | import Features from "./_components/features";
7 | import FifthSection from "./_components/fifth-section";
8 | import Quote from "./_components/quote";
9 | import Explore from "./_components/explore";
10 | import Slider from "./_components/slider";
11 | import TenthSection from "../(landing-page)/_components/tenth-section";
12 | import BottomCard from "@/components/ui/bottom-card";
13 | import BottomSection from "@/components/ui/bottom-section";
14 | import Footer from "@/components/ui/footer";
15 |
16 | const TeamAlignment = () => {
17 | return (
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | );
42 | }
43 |
44 | export default TeamAlignment;
--------------------------------------------------------------------------------
/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "default",
4 | "rsc": true,
5 | "tsx": true,
6 | "tailwind": {
7 | "config": "tailwind.config.js",
8 | "css": "app/globals.css",
9 | "baseColor": "slate",
10 | "cssVariables": true
11 | },
12 | "aliases": {
13 | "components": "@/components",
14 | "utils": "@/lib/utils"
15 | }
16 | }
--------------------------------------------------------------------------------
/components/ui/accordion.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as AccordionPrimitive from "@radix-ui/react-accordion"
5 | import { ChevronDown } from "lucide-react"
6 |
7 | import { cn } from "@/lib/utils"
8 |
9 | const Accordion = AccordionPrimitive.Root
10 |
11 | const AccordionItem = React.forwardRef<
12 | React.ElementRef,
13 | React.ComponentPropsWithoutRef
14 | >(({ className, ...props }, ref) => (
15 |
20 | ))
21 | AccordionItem.displayName = "AccordionItem"
22 |
23 | const AccordionTrigger = React.forwardRef<
24 | React.ElementRef,
25 | React.ComponentPropsWithoutRef
26 | >(({ className, children, ...props }, ref) => (
27 |
28 | svg]:rotate-180",
32 | className
33 | )}
34 | {...props}
35 | >
36 | {children}
37 |
38 |
39 |
40 | ))
41 | AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName
42 |
43 | const AccordionContent = React.forwardRef<
44 | React.ElementRef,
45 | React.ComponentPropsWithoutRef
46 | >(({ className, children, ...props }, ref) => (
47 |
52 | {children}
53 |
54 | ))
55 |
56 | AccordionContent.displayName = AccordionPrimitive.Content.displayName
57 |
58 | export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }
59 |
--------------------------------------------------------------------------------
/components/ui/bottom-card.tsx:
--------------------------------------------------------------------------------
1 | import { Download } from "lucide-react";
2 |
3 | const BottomCard = () => {
4 | return (
5 |
6 |
7 |
8 | Bird works wherever you do.
9 |
10 |
11 |
32 |
33 |
34 |
Get bird for free
35 |
36 |
37 |
38 |
39 |
40 | );
41 | };
42 |
43 | export default BottomCard;
44 |
--------------------------------------------------------------------------------
/components/ui/bottom-section.tsx:
--------------------------------------------------------------------------------
1 |
2 |
3 | const BottomSection = () => {
4 | return (
5 |
6 |
7 |
8 |
PRODUCT
9 |
10 |
11 |
Home
12 |
Product
13 |
What's New
14 |
Pricing
15 |
Premium
16 |
17 |
18 |
19 |
20 |
21 |
USE CASES
22 |
23 |
24 |
Company
25 |
Leadership
26 |
27 |
Customers
28 |
Diversity
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
FOR BUSINESS
37 |
38 |
39 |
Project Management
40 |
Goal Management
41 |
42 |
Increase Productivity
43 |
Work Management
44 |
Project Planning
45 |
46 |
47 |
48 |
49 |
50 |
51 |
DOWNLOADS
52 |
53 |
54 |
Help
55 |
Forum
56 |
57 |
Support
58 |
Work Management
59 |
Project Planning
60 |
61 |
62 |
63 |
64 |
65 |
66 |
RESOURCES
67 |
68 |
69 |
Help
70 |
Forum
71 |
72 |
Support
73 |
Work Management
74 |
Project Planning
75 |
76 |
77 |
78 |
79 |
80 |
81 |
Company
82 |
83 |
84 |
Help
85 |
Forum
86 |
87 |
Support
88 |
Work Management
89 |
Project Planning
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
);
103 | }
104 |
105 | export default BottomSection;
--------------------------------------------------------------------------------
/components/ui/button.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 | import { Slot } from "@radix-ui/react-slot"
3 | import { cva, type VariantProps } from "class-variance-authority"
4 |
5 | import { cn } from "@/lib/utils"
6 |
7 | const buttonVariants = cva(
8 | "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
9 | {
10 | variants: {
11 | variant: {
12 | default: "bg-primary text-primary-foreground ",
13 | destructive:
14 | "bg-destructive text-destructive-foreground hover:bg-destructive/90",
15 | outline:
16 | "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
17 | secondary:
18 | "bg-secondary text-secondary-foreground hover:bg-secondary/80",
19 | ghost: "hover:bg-accent hover:text-accent-foreground",
20 | link: "text-primary underline-offset-4 hover:underline",
21 | },
22 | size: {
23 | default: "h-10 px-4 py-2",
24 | sm: "h-9 rounded-md px-3",
25 | lg: "h-11 rounded-md px-8",
26 | icon: "h-10 w-10",
27 | },
28 | },
29 | defaultVariants: {
30 | variant: "default",
31 | size: "default",
32 | },
33 | }
34 | )
35 |
36 | export interface ButtonProps
37 | extends React.ButtonHTMLAttributes,
38 | VariantProps {
39 | asChild?: boolean
40 | }
41 |
42 | const Button = React.forwardRef(
43 | ({ className, variant, size, asChild = false, ...props }, ref) => {
44 | const Comp = asChild ? Slot : "button"
45 | return (
46 |
51 | )
52 | }
53 | )
54 | Button.displayName = "Button"
55 |
56 | export { Button, buttonVariants }
57 |
--------------------------------------------------------------------------------
/components/ui/checkbox.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as CheckboxPrimitive from "@radix-ui/react-checkbox"
5 | import { Check } from "lucide-react"
6 |
7 | import { cn } from "@/lib/utils"
8 |
9 | const Checkbox = React.forwardRef<
10 | React.ElementRef,
11 | React.ComponentPropsWithoutRef
12 | >(({ className, ...props }, ref) => (
13 |
21 |
24 |
25 |
26 |
27 | ))
28 | Checkbox.displayName = CheckboxPrimitive.Root.displayName
29 |
30 | export { Checkbox }
31 |
--------------------------------------------------------------------------------
/components/ui/footer.tsx:
--------------------------------------------------------------------------------
1 | import { Facebook, Globe, Instagram, Linkedin, Twitter, Youtube } from "lucide-react";
2 |
3 | const Footer = () => {
4 | return (
5 |
6 |
7 |
8 |
9 |
10 | ©2024 Bird, Inc. All rights reserved.
11 |
12 |
13 |
14 |
15 |
16 | Terms and Conditions
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
);
46 | }
47 |
48 | export default Footer;
--------------------------------------------------------------------------------
/components/ui/input.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | export interface InputProps
6 | extends React.InputHTMLAttributes {}
7 |
8 | const Input = React.forwardRef(
9 | ({ className, type, ...props }, ref) => {
10 | return (
11 |
20 | )
21 | }
22 | )
23 | Input.displayName = "Input"
24 |
25 | export { Input }
26 |
--------------------------------------------------------------------------------
/components/ui/label.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as LabelPrimitive from "@radix-ui/react-label"
5 | import { cva, type VariantProps } from "class-variance-authority"
6 |
7 | import { cn } from "@/lib/utils"
8 |
9 | const labelVariants = cva(
10 | "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
11 | )
12 |
13 | const Label = React.forwardRef<
14 | React.ElementRef,
15 | React.ComponentPropsWithoutRef &
16 | VariantProps
17 | >(({ className, ...props }, ref) => (
18 |
23 | ))
24 | Label.displayName = LabelPrimitive.Root.displayName
25 |
26 | export { Label }
27 |
--------------------------------------------------------------------------------
/components/ui/navbar/_components/action-buttons.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import React, { useState } from "react";
4 |
5 | import { Button } from "@/components/ui/button";
6 |
7 | import { X, AlignJustify } from "lucide-react";
8 | import Link from "next/link";
9 | import DropdownMenu from "./drop-down-menu";
10 |
11 | const ActionButtons = () => {
12 |
13 | const [isDropdownVisible, setDropdownVisible] = useState(false);
14 |
15 | const toggleDropdown = () => {
16 | setDropdownVisible(!isDropdownVisible);
17 | }
18 |
19 | const closeDropdown = () => {
20 | setDropdownVisible(false);
21 | }
22 |
23 |
24 |
25 | return (
26 |
36 |
37 |
46 |
Pricing
47 |
48 |
49 |
58 |
Sign In
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
85 | Get Bird for Free
86 |
87 |
88 |
89 |
107 | Contact Sales
108 |
109 |
110 |
111 |
112 |
113 | {isDropdownVisible && (
114 |
122 |
123 |
124 | )}
125 | {!isDropdownVisible && (
126 |
132 | )}
133 |
134 | {isDropdownVisible &&
}
135 |
136 |
137 |
138 | );
139 | };
140 |
141 | export default ActionButtons;
142 |
--------------------------------------------------------------------------------
/components/ui/navbar/_components/content-menu.tsx:
--------------------------------------------------------------------------------
1 |
2 | import React from 'react';
3 | import Link from 'next/link';
4 |
5 |
6 | interface ContentMenuProps {
7 | options: { label: string; emoji: React.ReactElement; href: string }[];
8 | }
9 |
10 |
11 | const ContentMenu : React.FC = ({options}) => {
12 | return (
13 |
14 |
29 |
30 | {options.map((option, index) => (
31 |
32 |
33 |
34 |
{option.emoji}
35 |
{option.label}
36 |
37 |
38 |
39 |
40 |
41 |
42 | ))}
43 |
44 |
);
45 | }
46 |
47 | export default ContentMenu;
--------------------------------------------------------------------------------
/components/ui/navbar/_components/logo.tsx:
--------------------------------------------------------------------------------
1 |
2 | import Image from "next/image";
3 | import Link from "next/link";
4 |
5 | const Logo = () => {
6 | return (
7 |
8 |
9 |
16 |
17 |
18 |
19 |
);
20 | }
21 |
22 | export default Logo;
--------------------------------------------------------------------------------
/components/ui/navbar/navbar.tsx:
--------------------------------------------------------------------------------
1 | import ActionButtons from "./_components/action-buttons";
2 | import Logo from "./_components/logo";
3 | import { NavigationMenuBar } from "./_components/menu";
4 |
5 | const Navbar = () => {
6 | return (
7 |
39 | );
40 | };
41 |
42 | export default Navbar;
43 |
--------------------------------------------------------------------------------
/components/ui/textarea.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | export interface TextareaProps
6 | extends React.TextareaHTMLAttributes {}
7 |
8 | const Textarea = React.forwardRef(
9 | ({ className, ...props }, ref) => {
10 | return (
11 |
19 | )
20 | }
21 | )
22 | Textarea.displayName = "Textarea"
23 |
24 | export { Textarea }
25 |
--------------------------------------------------------------------------------
/components/ui/toaster.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import {
4 | Toast,
5 | ToastClose,
6 | ToastDescription,
7 | ToastProvider,
8 | ToastTitle,
9 | ToastViewport,
10 | } from "@/components/ui/toast"
11 | import { useToast } from "@/components/ui/use-toast"
12 |
13 | export function Toaster() {
14 | const { toasts } = useToast()
15 |
16 | return (
17 |
18 | {toasts.map(function ({ id, title, description, action, ...props }) {
19 | return (
20 |
21 |
22 | {title && {title} }
23 | {description && (
24 | {description}
25 | )}
26 |
27 | {action}
28 |
29 |
30 | )
31 | })}
32 |
33 |
34 | )
35 | }
36 |
--------------------------------------------------------------------------------
/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from "clsx"
2 | import { twMerge } from "tailwind-merge"
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs))
6 | }
7 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {}
3 |
4 | module.exports = nextConfig
5 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "loom-clone-video",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@hookform/resolvers": "^3.3.2",
13 | "@radix-ui/react-accordion": "^1.1.2",
14 | "@radix-ui/react-checkbox": "^1.0.4",
15 | "@radix-ui/react-label": "^2.0.2",
16 | "@radix-ui/react-select": "^2.0.0",
17 | "@radix-ui/react-slot": "^1.0.2",
18 | "@radix-ui/react-toast": "^1.1.5",
19 | "class-variance-authority": "^0.7.0",
20 | "clsx": "^2.0.0",
21 | "emojisplosion": "^2.6.1",
22 | "lucide-react": "^0.294.0",
23 | "next": "14.0.4",
24 | "nodemailer": "^6.9.7",
25 | "react": "^18",
26 | "react-dom": "^18",
27 | "react-hook-form": "^7.49.2",
28 | "react-infinite-logo-slider": "^1.0.13",
29 | "react-responsive": "^9.0.2",
30 | "react-slick": "^0.29.0",
31 | "slick-carousel": "^1.8.1",
32 | "tailwind-merge": "^2.1.0",
33 | "tailwindcss-animate": "^1.0.7",
34 | "zod": "^3.22.4"
35 | },
36 | "devDependencies": {
37 | "@types/node": "^20",
38 | "@types/nodemailer": "^6.4.14",
39 | "@types/react": "^18",
40 | "@types/react-dom": "^18",
41 | "@types/react-slick": "^0.23.12",
42 | "autoprefixer": "^10.0.1",
43 | "eslint": "^8",
44 | "eslint-config-next": "14.0.4",
45 | "postcss": "^8",
46 | "tailwindcss": "^3.3.0",
47 | "typescript": "^5"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/images/sales.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/undraw-3.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/bird-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iggy-tech/loom-clone-video/140e21b60e0944f3978f5e8bb373bda7ce91a590/public/logos/bird-logo.png
--------------------------------------------------------------------------------
/public/logos/logoipsum-223.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-224.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-225.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-226.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-245.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-264.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-270.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-273.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-274.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-289.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-292.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-293.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-294.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-295.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-296.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-298.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-299.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-311.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-317.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-323.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-325.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-327.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/logoipsum-329.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logos/twitter-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iggy-tech/loom-clone-video/140e21b60e0944f3978f5e8bb373bda7ce91a590/public/logos/twitter-logo.png
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/videos/hero-1.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iggy-tech/loom-clone-video/140e21b60e0944f3978f5e8bb373bda7ce91a590/public/videos/hero-1.mp4
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | darkMode: ["class"],
4 | content: [
5 | './pages/**/*.{ts,tsx}',
6 | './components/**/*.{ts,tsx}',
7 | './app/**/*.{ts,tsx}',
8 | './src/**/*.{ts,tsx}',
9 | ],
10 | theme: {
11 | container: {
12 | center: true,
13 | padding: "2rem",
14 | screens: {
15 | "2xl": "1400px",
16 | },
17 | },
18 | extend: {
19 | colors: {
20 | border: "hsl(var(--border))",
21 | input: "hsl(var(--input))",
22 | ring: "hsl(var(--ring))",
23 | background: "hsl(var(--background))",
24 | foreground: "hsl(var(--foreground))",
25 | primary: {
26 | DEFAULT: "hsl(var(--primary))",
27 | foreground: "hsl(var(--primary-foreground))",
28 | },
29 | secondary: {
30 | DEFAULT: "hsl(var(--secondary))",
31 | foreground: "hsl(var(--secondary-foreground))",
32 | },
33 | destructive: {
34 | DEFAULT: "hsl(var(--destructive))",
35 | foreground: "hsl(var(--destructive-foreground))",
36 | },
37 | muted: {
38 | DEFAULT: "hsl(var(--muted))",
39 | foreground: "hsl(var(--muted-foreground))",
40 | },
41 | accent: {
42 | DEFAULT: "hsl(var(--accent))",
43 | foreground: "hsl(var(--accent-foreground))",
44 | },
45 | popover: {
46 | DEFAULT: "hsl(var(--popover))",
47 | foreground: "hsl(var(--popover-foreground))",
48 | },
49 | card: {
50 | DEFAULT: "hsl(var(--card))",
51 | foreground: "hsl(var(--card-foreground))",
52 | },
53 | },
54 | borderRadius: {
55 | lg: "var(--radius)",
56 | md: "calc(var(--radius) - 2px)",
57 | sm: "calc(var(--radius) - 4px)",
58 | },
59 | keyframes: {
60 | "accordion-down": {
61 | from: { height: 0 },
62 | to: { height: "var(--radix-accordion-content-height)" },
63 | },
64 | "accordion-up": {
65 | from: { height: "var(--radix-accordion-content-height)" },
66 | to: { height: 0 },
67 | },
68 | },
69 | animation: {
70 | "accordion-down": "accordion-down 0.2s ease-out",
71 | "accordion-up": "accordion-up 0.2s ease-out",
72 | },
73 | },
74 | },
75 | plugins: [require("tailwindcss-animate")],
76 | }
--------------------------------------------------------------------------------
/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from 'tailwindcss'
2 |
3 | const config: Config = {
4 | content: [
5 | './pages/**/*.{js,ts,jsx,tsx,mdx}',
6 | './components/**/*.{js,ts,jsx,tsx,mdx}',
7 | './app/**/*.{js,ts,jsx,tsx,mdx}',
8 | ],
9 | theme: {
10 | extend: {
11 | backgroundImage: {
12 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
13 | 'gradient-conic':
14 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
15 | },
16 | },
17 | },
18 | plugins: [],
19 | }
20 | export default config
21 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "noEmit": true,
9 | "esModuleInterop": true,
10 | "module": "esnext",
11 | "moduleResolution": "bundler",
12 | "resolveJsonModule": true,
13 | "isolatedModules": true,
14 | "jsx": "preserve",
15 | "incremental": true,
16 | "plugins": [
17 | {
18 | "name": "next"
19 | }
20 | ],
21 | "paths": {
22 | "@/*": ["./*"]
23 | }
24 | },
25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
26 | "exclude": ["node_modules"]
27 | }
28 |
--------------------------------------------------------------------------------