Skip to content

Commit d396595

Browse files
authored
Merge pull request #1124 from onflow/brian-doyle/revamp-root
Brian doyle/revamp root
2 parents a59ff6c + c300884 commit d396595

File tree

19 files changed

+790
-134
lines changed

19 files changed

+790
-134
lines changed

docs/ecosystem/grants.md

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
title: Grants
3+
description: Discover grant opportunities and funding programs available for Flow developers
4+
sidebar_position: 5
5+
sidebar_custom_props:
6+
icon: 🌱
7+
---
8+
9+
# Flow Developer Grants
10+
11+
The Flow Foundation provides grants to support developers and teams building tools and products that enhance the Flow ecosystem.
12+
13+
## Focus Areas
14+
15+
We are particularly interested in projects across these key areas:
16+
17+
- **Telegram Miniapps**: Building integrations and applications for the Telegram ecosystem
18+
- **DeFi**: Innovative decentralized finance solutions
19+
- **AI Agents**: Artificial intelligence and autonomous systems
20+
- **Sports**: Applications and platforms in the sports and gaming sector
21+
22+
## How to Apply
23+
24+
1. Visit the [Flow Developer Grants Repository](https://github.com/onflow/developer-grants)
25+
2. Create a new issue using the "Grant Application" template
26+
3. Fill out all required details about your project

docs/ecosystem/hackathons.md

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---
2+
title: Hackathons
3+
description: Participate in Flow hackathons to build, learn, and win prizes
4+
sidebar_position: 6
5+
sidebar_custom_props:
6+
icon: 🚀
7+
---
8+
9+
# Flow World Tour Hackathons
10+
11+
Some of the most groundbreaking blockchain projects began as hackathon ideas—CryptoKitties, the game that revolutionized NFTs, was first built at the ETHGlobal Waterloo hackathon. Your project could be next.
12+
13+
## Flow World Tour
14+
15+
We're bringing together builders, creators, and innovators through a series of global hackathons—both in-person and online. These events are more than just competitions; they’re an opportunity to experiment, collaborate, and turn bold ideas into reality.
16+
17+
### Why Join?
18+
19+
#### **Build & Learn**
20+
21+
Get hands-on experience with Flow while accessing expert mentorship, technical workshops, and valuable resources to refine your skills on the cutting edge, from AI agents to next-gen DeFi.
22+
23+
#### **Network & Connect**
24+
25+
Meet like-minded builders, potential co-founders, and potential investors. These events are a gateway to becoming part of the global Flow community.
26+
27+
#### **Win & Launch**
28+
29+
With substantial prize pools, industry recognition, and the chance to launch your project, hackathons can be the stepping stone to your next big startup, side-project, or public good.
30+
31+
## Find Your Flow State
32+
33+
Stay ahead of upcoming hackathons and exclusive announcements. [Join Flow World Tour on Telegram](https://t.me/flow_world_tour).

docs/ecosystem/vcs-and-funds.md

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
title: VCs & Funds
3+
description: Connect with venture capital firms and investment funds supporting Flow projects
4+
sidebar_position: 4
5+
sidebar_custom_props:
6+
icon: 💼
7+
---
8+
9+
# VCs & Funds
10+
11+
Building a successful Web3 project requires more than just great technology - having the right investors and partners can make all the difference. The Flow ecosystem is supported by some of the world's leading venture capital firms and crypto-native funds.
12+
13+
Research shows that warm introductions can increase your chances of securing funding by up to 500% more liley compared to cold outreach. The Flow Foundation can help facilitate introductions to our network of trusted investors who have a deep understanding of the Flow ecosystem and web3. Reach out to your local dev-rel in [office hours](https://calendar.google.com/calendar/u/0/embed?src=c_47978f5cd9da636cadc6b8473102b5092c1a865dd010558393ecb7f9fd0c9ad0@group.calendar.google.com) or [discord](https://discord.gg/flow) to get a warm introduction.
14+
15+
<div style={{userSelect: "none"}}>
16+
<iframe
17+
className="airtable-embed"
18+
src="https://airtable.com/embed/appl4lT5epHlx31oE/shrhjjDu3V4cCoMM6?viewControls=on"
19+
frameBorder="0"
20+
onMouseWheel=""
21+
style={{
22+
width: "100%",
23+
height: "533px",
24+
background: "transparent",
25+
border: "1px solid #ccc"
26+
}}
27+
/>
28+
</div>

src/components/ActionCard.tsx

+37-21
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ interface ActionCardProps {
77
heading: string;
88
description: string;
99
onClick?: () => void;
10-
variant?: 'default' | 'overlay';
10+
variant?: 'default' | 'overlay' | 'horizontal';
1111
}
1212

1313
export const LocationIcon: React.FC = () => (
@@ -33,22 +33,21 @@ export const LocationIcon: React.FC = () => (
3333
);
3434

3535
const ActionCard: React.FC<ActionCardProps> = ({
36-
iconColor = 'white',
37-
cardColor = 'black',
38-
heading,
39-
description,
40-
onClick,
41-
variant = 'default',
42-
}) => {
36+
iconColor = 'white',
37+
cardColor = 'black',
38+
heading,
39+
description,
40+
onClick,
41+
variant = 'default',
42+
}) => {
4343
const cardBg = colors[cardColor].dark;
4444
const iconBg = colors[iconColor].light;
4545

4646
return (
4747
<div
4848
onClick={onClick}
49-
className={`relative flex flex-col justify-between p-6 rounded-lg shadow-lg hover:scale-105 transition-transform ${
50-
onClick ? 'cursor-pointer' : ''
51-
} ${cardBg}`}
49+
className={`relative flex flex-col justify-between p-6 rounded-lg shadow-lg hover:scale-[1.02] transition-transform ${variant === 'overlay' ? 'mt-6' : ''
50+
} ${onClick ? 'cursor-pointer' : ''} ${cardBg}`}
5251
>
5352
{variant === 'overlay' && (
5453
<div
@@ -57,16 +56,33 @@ const ActionCard: React.FC<ActionCardProps> = ({
5756
<LocationIcon />
5857
</div>
5958
)}
60-
{variant === 'default' && (
61-
<div
62-
className={`w-10 h-10 rounded-md flex items-center justify-center mb-6 ${iconBg}`}
63-
>
64-
<LocationIcon />
65-
</div>
66-
)}
67-
<div className="mt-auto">
68-
<h3 className="text-xl font-semibold text-white mb-2">{heading}</h3>
69-
<p className="text-sm text-gray-100">{description}</p>
59+
<div className="flex flex-col h-full">
60+
{variant === 'default' && (
61+
<div
62+
className={`w-10 h-10 rounded-md flex items-center justify-center mb-4 ${iconBg}`}
63+
>
64+
<LocationIcon />
65+
</div>
66+
)}
67+
{variant === 'horizontal' && (
68+
<div className="flex items-center gap-4 mb-4">
69+
<div
70+
className={`w-10 h-10 rounded-md flex items-center justify-center ${iconBg}`}
71+
>
72+
<LocationIcon />
73+
</div>
74+
<h3 className="text-xl font-semibold text-white">{heading}</h3>
75+
</div>
76+
)}
77+
{variant !== 'horizontal' && (
78+
<div className={variant === 'overlay' ? 'mt-6' : ''}>
79+
<h3 className="text-xl font-semibold text-white mb-2">{heading}</h3>
80+
<p className="text-sm text-gray-100">{description}</p>
81+
</div>
82+
)}
83+
{variant === 'horizontal' && (
84+
<p className="text-sm text-gray-100">{description}</p>
85+
)}
7086
</div>
7187
</div>
7288
);

src/components/ActionCardGrid.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,22 @@ import ActionCard, { LocationIcon } from '@site/src/components/ActionCard';
44

55
interface ActionCardGridProps {
66
title: string;
7+
id?: string;
78
sections: {
89
title: string;
910
cards: {
1011
heading: string;
1112
description: string;
1213
iconColor?: string;
1314
cardColor?: string;
15+
onClick?: () => void;
1416
}[];
1517
}[];
1618
}
1719

18-
const ActionCardGrid: React.FC<ActionCardGridProps> = ({ title, sections }) => {
20+
const ActionCardGrid: React.FC<ActionCardGridProps> = ({ title, sections, id }) => {
1921
return (
20-
<div className="relative p-8">
22+
<div className="relative p-8" id={id}>
2123
{/* Main Title Section */}
2224
<div className="relative flex items-center mb-8">
2325
{/* Icon and Line Container */}
@@ -52,6 +54,7 @@ const ActionCardGrid: React.FC<ActionCardGridProps> = ({ title, sections }) => {
5254
cardColor={card.cardColor as ColorOption}
5355
heading={card.heading}
5456
description={card.description}
57+
onClick={card.onClick}
5558
/>
5659
))}
5760
</div>

src/constants/colors.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export type ColorOption = 'green' | 'blue' | 'purple' | 'teal' | 'black' | 'white';
1+
export type ColorOption = 'green' | 'blue' | 'purple' | 'teal' | 'black' | 'white' | 'flowgreen';
22

33
export const colors: Record<ColorOption, { light: string; dark: string }> = {
44
green: {
@@ -25,4 +25,8 @@ export const colors: Record<ColorOption, { light: string; dark: string }> = {
2525
light: 'bg-white',
2626
dark: 'bg-gray-100',
2727
},
28+
flowgreen: {
29+
light: 'bg-[#01EF8B]',
30+
dark: 'bg-[#01EF8B]'
31+
},
2832
};

src/ui/design-system/src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ export { Heading } from './lib/Components/Heading'
33
export type { HeadingProps } from './lib/Components/Heading'
44
// export { InternalSidebar } from './lib/Components/InternalSidebar'
55
export { LandingHeader } from './lib/Components/LandingHeader'
6-
export { LandingHeaderHome } from './lib/Components/LandingHeaderHome'
6+
export { LandingHeaderHome } from './lib/Components/HomeNav'
77
export { LinkCard2Column } from './lib/Components/LinkCard2Column'
88
export type { LinkCard2ColumnProps } from './lib/Components/LinkCard2Column'
99
export { default as NetworkCard } from './lib/Components/NetworkCard'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import React from 'react';
2+
import { colors } from '@site/src/constants/colors';
3+
import { useProgress } from '@site/src/hooks/use-progress';
4+
import { useCurrentUser } from '@site/src/hooks/use-current-user';
5+
6+
export const GoldStarPanel: React.FC = () => {
7+
const { getProgress } = useProgress();
8+
const { user } = useCurrentUser();
9+
10+
const handleAskFlowAI = (e: React.MouseEvent) => {
11+
e.preventDefault();
12+
13+
const el = document.querySelector('ask-cookbook') as HTMLElement & {
14+
shadowRoot?: ShadowRoot;
15+
};
16+
if (!el) {
17+
console.warn('ask-cookbook element not found');
18+
return;
19+
}
20+
21+
const shadow = el.shadowRoot;
22+
if (!shadow) {
23+
console.warn('ask-cookbook has no shadowRoot');
24+
return;
25+
}
26+
27+
const button = shadow.querySelector(
28+
'#ask-cookbook-button',
29+
) as HTMLButtonElement;
30+
if (!button) {
31+
console.warn(
32+
'Internal #ask-cookbook-button not found in the shadow root',
33+
);
34+
return;
35+
}
36+
37+
button.click();
38+
};
39+
40+
return (
41+
<div className="flex flex-col gap-4 h-full">
42+
<div className="flex gap-2">
43+
<button
44+
onClick={() => window.open('https://calendar.google.com/calendar/embed?src=c_47978f5cd9da636cadc6b8473102b5092c1a865dd010558393ecb7f9fd0c9ad0%40group.calendar.google.com', '_blank')}
45+
className={`flex-1 ${colors.black.dark} text-white px-4 py-2 rounded-xl hover:bg-gray-700 appearance-none cursor-pointer border-0`}
46+
>
47+
Office Hours
48+
</button>
49+
<button
50+
onClick={() => window.open('https://github.com/orgs/onflow/discussions', '_blank')}
51+
className={`flex-1 ${colors.black.dark} text-white px-4 py-2 rounded-xl hover:bg-gray-700 appearance-none cursor-pointer border-0`}
52+
>
53+
Discussions
54+
</button>
55+
<button
56+
onClick={handleAskFlowAI}
57+
className={`flex-1 ${colors.black.dark} text-white px-4 py-2 rounded-xl hover:bg-gray-700 appearance-none cursor-pointer border-0`}
58+
>
59+
Ask Flow AI
60+
</button>
61+
</div>
62+
63+
<div className={`${colors.black.dark} p-6 rounded-lg shadow-lg flex-1`}>
64+
<div className="w-full bg-gray-200 rounded-full h-2.5 dark:bg-gray-700">
65+
<div className={`${colors.flowgreen.light} h-2.5 rounded-full`} style={{ width: `${user.loggedIn ? getProgress() * 100 : 0}%` }}></div>
66+
</div>
67+
<p className="text-sm text-gray-100 mt-2">
68+
{user.loggedIn
69+
? `Profile Completion: ${Math.round(getProgress() * 100)}%`
70+
: 'Please connect your wallet and create a profile'}
71+
</p>
72+
</div>
73+
</div>
74+
);
75+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import React from 'react';
2+
import { NewsCarousel } from '../NewsCarousel';
3+
import { GoldStarPanel } from '../GoldStarPanel';
4+
5+
export const HomeHeader: React.FC = () => {
6+
return (
7+
<div className="relative p-8">
8+
<div className="relative pl-8">
9+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 pl-8">
10+
<div className="lg:col-span-2">
11+
<NewsCarousel />
12+
</div>
13+
<div>
14+
<GoldStarPanel />
15+
</div>
16+
</div>
17+
</div>
18+
</div>
19+
);
20+
};

0 commit comments

Comments
 (0)