diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..8d932f2 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,25 @@ +name: CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + cache: 'npm' + - name: Install dependencies + run: npm install + - name: Check contracts + run: npx clarinet check + - name: Run tests + run: npm test diff --git a/README.md b/README.md new file mode 100644 index 0000000..fd9a2c4 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Stacks Quest Boards diff --git a/config.js b/config.js new file mode 100644 index 0000000..92b9845 --- /dev/null +++ b/config.js @@ -0,0 +1 @@ +module.exports = { appName: 'stacks-quest-boards' }; diff --git a/constants.js b/constants.js new file mode 100644 index 0000000..46d3325 --- /dev/null +++ b/constants.js @@ -0,0 +1 @@ +module.exports = { ACTIVE: 'active', COMPLETED: 'completed' }; diff --git a/frontend/app/layout.tsx b/frontend/app/layout.tsx index f7fa87e..3ffadb0 100644 --- a/frontend/app/layout.tsx +++ b/frontend/app/layout.tsx @@ -13,8 +13,15 @@ const geistMono = Geist_Mono({ }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "Stacks Quest Boards - Learn Stacks Blockchain Development", + description: "Comprehensive learning platform for Stacks blockchain development. Master smart contracts, DeFi protocols, NFTs, and frontend integration with hands-on tutorials and documentation.", + keywords: ["Stacks", "Blockchain", "Smart Contracts", "Clarity", "DeFi", "NFT", "Web3", "Cryptocurrency"], + authors: [{ name: "Stacks Community" }], + openGraph: { + title: "Stacks Quest Boards - Learn Stacks Blockchain Development", + description: "Your comprehensive learning platform for Stacks blockchain development", + type: "website", + }, }; export default function RootLayout({ diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx index 295f8fd..726e83d 100644 --- a/frontend/app/page.tsx +++ b/frontend/app/page.tsx @@ -1,65 +1,210 @@ -import Image from "next/image"; +import Link from "next/link"; export default function Home() { + const learningPaths = [ + { + title: "Stacks Fundamentals", + description: "Learn the basics of Stacks blockchain, transactions, and smart contracts", + modules: ["What is Stacks?", "Transactions", "Clarity Language", "Smart Contracts"], + color: "from-blue-500 to-purple-600" + }, + { + title: "DeFi Development", + description: "Build decentralized finance applications on Stacks", + modules: ["Token Standards", "DEX Integration", "Lending Protocols", "Yield Farming"], + color: "from-green-500 to-teal-600" + }, + { + title: "NFT Creation", + description: "Create and manage non-fungible tokens on Stacks", + modules: ["SIP-009 Standard", "Badge NFTs", "Metadata Management", "Marketplaces"], + color: "from-orange-500 to-red-600" + }, + { + title: "Frontend Integration", + description: "Connect web applications to Stacks blockchain", + modules: ["Wallet Connection", "@stacks/connect", "@stacks/transactions", "React Hooks"], + color: "from-indigo-500 to-blue-600" + } + ]; + + const featuredResources = [ + { + title: "Badge NFT Contract", + description: "Complete SIP-009 compliant NFT implementation with admin controls", + link: "/docs/badge-nft", + type: "Contract Documentation" + }, + { + title: "Clarity 4 Features", + description: "Latest Clarity language features including stacks-block-time and post-conditions", + link: "/stacks/stacks-shards/082_clarity_4_is_now_live", + type: "Technical Guide" + }, + { + title: "Frontend Integration", + description: "Complete guide to building Stacks-connected web applications", + link: "/stacks/stacks-essentials/078_build_a_frontend", + type: "Tutorial" + } + ]; + return ( -
-
- Next.js logo -
-

- To get started, edit the page.tsx file. +
+ {/* Hero Section */} +
+
+

+ Stacks Quest Boards

-

- Looking for a starting point or more instructions? Head over to{" "} - + Your comprehensive learning platform for Stacks blockchain development. + Master smart contracts, DeFi protocols, NFTs, and frontend integration through + hands-on tutorials and documentation. +

+
+ - Templates - {" "} - or the{" "} - + - Learning - {" "} - center. + View Resources + +
+
+ + {/* Learning Paths */} +
+
+

+ Learning Paths +

+

+ Structured learning journeys to master Stacks development +

+
+ +
+ {learningPaths.map((path, index) => ( +
+
+
+

{path.title}

+

{path.description}

+
    + {path.modules.map((module, moduleIndex) => ( +
  • +
    + {module} +
  • + ))} +
+ +
+
+ ))} +
+
+ + {/* Featured Resources */} +
+
+

+ Featured Resources +

+

+ Essential documentation and guides for Stacks developers +

+
+ +
+ {featuredResources.map((resource, index) => ( +
+
+ + {resource.type} + +
+

+ {resource.title} +

+

+ {resource.description} +

+ + Read more → + +
+ ))} +
+
+ + {/* Stats */} +
+

Join the Stacks Community

+

+ Connect with developers building the future of decentralized applications

+
+
+
500+
+
Learning Modules
+
+
+
50+
+
Smart Contracts
+
+
+
10K+
+
Developers
+
+
-
- - Vercel logomark - Deploy Now - - - Documentation - + + {/* Call to Action */} +
+

+ Ready to Start Building? +

+

+ Dive into our comprehensive documentation and start your Stacks development journey today. +

+
+ + Official Docs + + + GitHub + +
-

+
); } diff --git a/lib/constants.ts b/lib/constants.ts new file mode 100644 index 0000000..8d4f409 --- /dev/null +++ b/lib/constants.ts @@ -0,0 +1 @@ +export const APP_NAME = 'Quest Boards'; diff --git a/lib/reward.ts b/lib/reward.ts new file mode 100644 index 0000000..4fb93b9 --- /dev/null +++ b/lib/reward.ts @@ -0,0 +1 @@ +export function calculateReward(points: number, multiplier: number): number { return points * multiplier; } diff --git a/lib/types.ts b/lib/types.ts new file mode 100644 index 0000000..e996088 --- /dev/null +++ b/lib/types.ts @@ -0,0 +1 @@ +export interface Quest { id: string; reward: number; } diff --git a/lib/validate.ts b/lib/validate.ts new file mode 100644 index 0000000..4e499c0 --- /dev/null +++ b/lib/validate.ts @@ -0,0 +1 @@ +export function validateQuest(quest: Quest): boolean { return quest.id.length > 0; } diff --git a/quests.js b/quests.js new file mode 100644 index 0000000..44d0c03 --- /dev/null +++ b/quests.js @@ -0,0 +1 @@ +module.exports = { quests: ['daily', 'weekly'] }; diff --git a/utils/progress.js b/utils/progress.js new file mode 100644 index 0000000..378a5b7 --- /dev/null +++ b/utils/progress.js @@ -0,0 +1 @@ +module.exports = { checkProgress: (q) => q.completed };