Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion components/Navigator/MainNavigator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ const topNavBarMenu = ({ t }: typeof i18n): MenuItem[] => [
{ href: '/project', title: t('open_source_projects') },
{ href: '/issue', title: 'GitHub issues' },
{ href: '/license-filter', title: t('license_filter') },
{ href: '/finance', title: t('finance_page_title') },
],
},
{
Expand All @@ -60,14 +61,15 @@ const topNavBarMenu = ({ t }: typeof i18n): MenuItem[] => [
},
],
},
{ href: '/bounty', title: t('bounty') },
{
title: t('NGO'),
subs: [
{ href: '/NGO', title: t('China_NGO_DB') },
{
href: 'https://open-source-bazaar.feishu.cn/wiki/VGrMwiweVivWrHkTcvpcJTjjnoY',
title: t('Open_Source_NGO_plan'),
},
{ href: '/NGO', title: t('China_NGO_DB') },
],
},
{
Expand Down
102 changes: 102 additions & 0 deletions pages/bounty.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import { observer } from 'mobx-react';
import { FC, useContext } from 'react';
import { Card, Col, Container, Row } from 'react-bootstrap';

import { PageHead } from '../components/Layout/PageHead';
import { I18nContext } from '../models/Translation';
import styles from '../styles/Bounty.module.less';

type BountyViewProps = Record<'icon' | 'title' | 'url', string>;

const BountyView: FC<BountyViewProps> = ({ title, url, icon }) => (
<Card className={`${styles.bountyCard} rounded-4`} body>
<Card.Title as="h2" className="fs-5">
{icon} <span className={styles.cardTitle}>{title}</span>
</Card.Title>
<div
className={`${styles.iframeContainer} overflow-hidden w-100 rounded-4 position-relative`}
style={{ height: 'calc(100vh - 10rem)' }}
>
<iframe className="border-0 h-100 w-100 rounded-4" title={title} loading="lazy" src={url} />
</div>
</Card>
);

const BountyPage: FC = observer(() => {
const { t } = useContext(I18nContext);

return (
<>
<PageHead title={t('bounty_page_title')} />

<section className={styles.hero}>
<Container>
<h1 className={`text-center ${styles.title}`}>{t('bounty_page_title')}</h1>
<p className={`text-center ${styles.description}`}>{t('bounty_page_description')}</p>
</Container>
</section>

<Container className="my-5 d-flex flex-column gap-4">
<BountyView
title={t('bounty_dashboard')}
url="https://open-source-bazaar.feishu.cn/share/base/dashboard/shrcnt4EaAxn3zx9faRarERgEqf"
icon="📊"
/>

<Row className="g-4">
<Col xs={12} lg={8}>
<BountyView
icon="📋"
title={t('bounty_task_rank')}
url="https://open-source-bazaar.feishu.cn/share/base/view/shrcnUVgb8E73UthaB2Tk4glnSb"
/>
</Col>
<Col xs={12} lg={4}>
<BountyView
icon="📝"
title={t('bounty_task_submission')}
url="https://open-source-bazaar.feishu.cn/share/base/form/shrcn2Ss97TSu3XgPi7mbZbrXLe"
/>
</Col>
</Row>

<Row className="g-4">
<Col xs={12} lg={8}>
<BountyView
icon="🏆"
title={t('bounty_achievement_rank')}
url="https://open-source-bazaar.feishu.cn/share/base/view/shrcne4IY9mYAfoo9a69oxyAdTb"
/>
</Col>
<Col xs={12} lg={4}>
<BountyView
icon="✅"
title={t('bounty_achievement_submission')}
url="https://open-source-bazaar.feishu.cn/share/base/form/shrcn7yHGIOnPNjdZck3eBaiMVc"
/>
</Col>
</Row>

<BountyView
icon="🪙"
title={t('bounty_token_rank')}
url="https://open-source-bazaar.feishu.cn/share/base/view/shrcn6QBgImHEjFH5qDf5tjmrzb"
/>

<BountyView
icon="🦸"
title={t('bounty_hero_rank')}
url="https://open-source-bazaar.feishu.cn/share/base/view/shrcnyrOkRfqSAjWEjCQ9T4OOwc"
/>

<BountyView
icon="💳"
title={t('bounty_debt_rank')}
url="https://open-source-bazaar.feishu.cn/share/base/view/shrcnImOzkBXW3okKp3nLskPMgd"
/>
</Container>
</>
);
});

export default BountyPage;
1 change: 1 addition & 0 deletions pages/finance/index.module.less
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 1rem;
list-style: none;
}

.statCard {
Expand Down
90 changes: 90 additions & 0 deletions styles/Bounty.module.less
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// Fresh and lively bounty page styling inspired by hackathon page

.hero {
position: relative;
background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
padding: 4rem 0;
overflow: hidden;
color: #fff;

&::before {
position: absolute;
top: -50%;
left: -50%;
animation: grid-animation 20s linear infinite;
background: radial-gradient(circle, rgba(255, 255, 255, 0.1) 1px, transparent 1px);
background-size: 50px 50px;
width: 200%;
height: 200%;
pointer-events: none;
content: '';
}
}

@keyframes grid-animation {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(50px, 50px);
}
}

.title {
margin-bottom: 1rem;
font-weight: 700;
font-size: 3rem;
text-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);

@media (max-width: 768px) {
font-size: 2rem;
}
}

.description {
opacity: 0.9;
margin: 0 auto;
max-width: 800px;
font-size: 1.2rem;

@media (max-width: 768px) {
font-size: 1rem;
}
}

.bountyCard {
transition: all 0.3s ease;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.2);
border: 2px solid transparent;
border-radius: 16px;
background: linear-gradient(135deg, rgba(102, 126, 234, 0.1), rgba(240, 147, 251, 0.1));
height: 100%;
overflow: hidden;

&:hover {
transform: translateY(-8px) scale(1.02);
box-shadow: 0 12px 35px rgba(102, 126, 234, 0.4);
background: linear-gradient(135deg, rgba(102, 126, 234, 0.15), rgba(240, 147, 251, 0.15));
}
}

.cardTitle {
display: inline-block;
margin-bottom: 1.5rem;
border-bottom: 3px solid;
border-image: linear-gradient(90deg, #f093fb, #f5576c, #ffd140) 1;
background: linear-gradient(90deg, #f093fb, #f5576c, #ffd140);
padding-bottom: 0.5rem;
font-weight: 700;
font-size: 1.3rem;
-webkit-text-fill-color: transparent;
background-clip: text;

@media (max-width: 768px) {
font-size: 1.1rem;
}
}

.iframeContainer {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
13 changes: 13 additions & 0 deletions translation/en-US.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export default {
open_collaborator_award: 'Open Collaborator Award',
activity: 'Activity',
hackathon: 'Hackathon',
bounty: 'Open Source Bounty',
open_source_projects: 'Open Source projects',
open_source_bazaar: 'Open Source Bazaar',
home_page: 'Home Page',
Expand Down Expand Up @@ -34,6 +35,18 @@ export default {
volunteer: 'Volunteer',
online_volunteer: 'Online Volunteer',

// Bounty page
bounty_page_title: 'Open Source Bounty',
bounty_page_description: 'Participate in open source projects and earn bounty rewards',
bounty_dashboard: 'Dashboard',
bounty_token_rank: 'Token Rank',
bounty_task_rank: 'Task Rank',
bounty_task_submission: 'Task Submission Form',
bounty_achievement_rank: 'Achievement Rank',
bounty_achievement_submission: 'Achievement Submission Form',
bounty_hero_rank: 'Hero Rank',
bounty_debt_rank: 'Debt Rank',

//License-tool Page
license_filter: 'Open Source License Selector',
feature_attitude_undefined: "I don't care",
Expand Down
13 changes: 13 additions & 0 deletions translation/zh-CN.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export default {
open_source_projects: '开源项目',
activity: '活动',
hackathon: '黑客马拉松',
bounty: '开源悬赏',
home_page: '主页',
wiki: '知识库',

Expand All @@ -33,6 +34,18 @@ export default {
volunteer: '志愿者',
online_volunteer: '线上志愿者',

// Bounty page
bounty_page_title: '开源悬赏',
bounty_page_description: '参与开源项目,获得悬赏奖励',
bounty_dashboard: '仪表盘',
bounty_token_rank: '代币榜',
bounty_task_rank: '任务榜',
bounty_task_submission: '任务发布表单',
bounty_achievement_rank: '成果榜',
bounty_achievement_submission: '成果提交表单',
bounty_hero_rank: '英雄榜',
bounty_debt_rank: '欠条榜',

//License-tool Page
license_filter: '开源协议选择器',
feature_attitude_undefined: '我不在乎',
Expand Down
13 changes: 13 additions & 0 deletions translation/zh-TW.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export default {
open_source_projects: '開源項目',
activity: '活動',
hackathon: '黑客馬拉松',
bounty: '開源懸賞',
home_page: '主頁',
wiki: '知識庫',

Expand All @@ -33,6 +34,18 @@ export default {
volunteer: '志工',
online_volunteer: '線上志工',

// Bounty page
bounty_page_title: '開源懸賞',
bounty_page_description: '參與開源項目,獲得懸賞獎勵',
bounty_dashboard: '儀表板',
bounty_token_rank: '代幣榜',
bounty_task_rank: '任務榜',
bounty_task_submission: '任務發布表單',
bounty_achievement_rank: '成果榜',
bounty_achievement_submission: '成果提交表單',
bounty_hero_rank: '英雄榜',
bounty_debt_rank: '欠條榜',

//License-tool Page
license_filter: '開源許可證選擇器',
feature_attitude_undefined: '我不在乎',
Expand Down
Loading