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
2 changes: 1 addition & 1 deletion .github/workflows/backup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: |
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
FILENAME="ethed_backup_${TIMESTAMP}.sql.gz"
FILENAME="eipsinsight_backup_${TIMESTAMP}.sql.gz"
pg_dump "$DATABASE_URL" | gzip > "$FILENAME"
echo "BACKUP_FILE=$FILENAME" >> $GITHUB_ENV

Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# EthEd Frontend
# EIPsInsight Academy Frontend

**Blockchain education made interactive, verifiable, and rewarding.**

EthEd transforms Web3 learning with NFT achievements, AI tutoring, and gamified progress tracking.
EIPsInsight Academy transforms Web3 learning with NFT achievements, AI tutoring, and gamified progress tracking.

## 🚀 What We've Built

### Interactive Experience
- **Global Grid System**: Full-viewport canvas with mouse-tracking glow effects inspired by Linear/Stripe/Vercel
- **Smart Content Detection**: Grid brightness adapts automatically over text for perfect readability
- **EthEd Agent**: Bottom-right hover assistant with smooth animation cycles (p1→pause→p3→pause2)
- **EIPsInsight Agent**: Bottom-right hover assistant with smooth animation cycles (p1→pause→p3→pause2)
- **Dialog Persistence**: Agent dialog stays open when clicking inside, closes when clicking outside

### Authentication & Infrastructure
Expand All @@ -34,8 +34,8 @@ EthEd transforms Web3 learning with NFT achievements, AI tutoring, and gamified

1. **Clone and install**
```bash
git clone https://github.com/AyuShetty/ethed-frontend.git
cd ethed-frontend
git clone https://github.com/AyuShetty/eipsinsight-academy-frontend.git
cd eipsinsight-academy-frontend
pnpm install
```

Expand Down
4 changes: 2 additions & 2 deletions SETUP.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# EthEd Setup Guide
# EIPsInsight Academy Setup Guide

## Environment Configuration

Expand Down Expand Up @@ -61,7 +61,7 @@
## Database Setup

1. **Install PostgreSQL** (if not already installed)
2. **Create a database** named `ethed`
2. **Create a database** named `eipsinsight`
3. **Update DATABASE_URL** in `.env.local`
4. **Run migrations:**
```bash
Expand Down
46 changes: 46 additions & 0 deletions _find-region.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import net from "net";

const user = "postgres.swsveygecsdalkkcufbx";
const db = "postgres";
const regions = [
"ap-south-1","ap-southeast-1","ap-southeast-2","ap-northeast-1",
"us-east-1","us-west-1","eu-west-1","eu-central-1","ca-central-1","sa-east-1"
];

function probe(region) {
return new Promise((resolve) => {
const host = `aws-0-${region}.pooler.supabase.com`;
const c = net.createConnection(6543, host, () => {
const params = `user\x00${user}\x00database\x00${db}\x00\x00`;
const len = 4 + 4 + Buffer.byteLength(params);
const buf = Buffer.alloc(len);
buf.writeInt32BE(len, 0);
buf.writeInt32BE(196608, 4); // protocol 3.0
buf.write(params, 8, "utf8");
c.write(buf);
});
let data = Buffer.alloc(0);
c.on("data", (d) => { data = Buffer.concat([data, d]); c.destroy(); });
c.on("close", () => {
const str = data.toString("utf8");
if (str.includes("Tenant or user not found")) {
resolve({ region, status: "WRONG_REGION" });
} else if (str.includes("FATAL") || str.includes("password") || str.includes("auth")) {
resolve({ region, status: "FOUND - needs auth", raw: str.slice(0,120) });
} else if (data.length > 0) {
resolve({ region, status: "RESPONDED", raw: data.toString("hex").slice(0,80) });
} else {
resolve({ region, status: "NO_DATA" });
}
});
c.on("error", (e) => resolve({ region, status: "ERR: " + e.message }));
setTimeout(() => { c.destroy(); resolve({ region, status: "TIMEOUT" }); }, 4000);
});
}

const results = await Promise.all(regions.map(probe));
for (const r of results) {
const icon = r.status.startsWith("FOUND") ? "✅" : r.status === "WRONG_REGION" ? "❌" : "⚠️";
console.log(`${icon} ${r.region.padEnd(18)} ${r.status}`);
if (r.raw) console.log(` └─ ${r.raw.replace(/\n/g," ")}`);
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "ethed-frontend",
"name": "eipsinsight-academy-frontend",
"version": "0.1.0",
"private": true,
"packageManager": "pnpm@9.15.4",
Expand Down
Binary file added public/logos/logo-old.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/logos/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions public/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "EthEd - Blockchain Education",
"short_name": "EthEd",
"name": "EIPsInsight Academy - Blockchain Education",
"short_name": "EIPsInsight",
"description": "Blockchain education made interactive, verifiable, and rewarding.",
"start_url": "/",
"display": "standalone",
Expand Down
4 changes: 2 additions & 2 deletions scripts/generate-apple-secret.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const path = require('path');

// Configuration - Replace these with your actual values
const TEAM_ID = '2R2CQNX632'; // Found in Apple Developer account membership
const CLIENT_ID = 'com.ethed.webapp.signin';
const CLIENT_ID = 'com.eipsinsight.webapp.signin';
const KEY_ID = 'M7N46GNRXN';
const PRIVATE_KEY_FILE = 'AuthKey_M7N46GNRXN.p8';

Expand All @@ -28,7 +28,7 @@ try {
console.error('❌ Error: Please update the configuration in this script!');
console.error('\nYou need to replace:');
console.error('- TEAM_ID: Your Apple Team ID');
console.error('- CLIENT_ID: Your Services ID (e.g., com.ethed.webapp.signin)');
console.error('- CLIENT_ID: Your Services ID (e.g., com.eipsinsight.webapp.signin)');
console.error('- KEY_ID: Your Sign In with Apple Key ID');
console.error('- PRIVATE_KEY_FILE: Name of your .p8 file');
process.exit(1);
Expand Down
2 changes: 1 addition & 1 deletion scripts/pin-genesis-assets.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ async function main() {
{ trait_type: "Edition", value: "Pioneer" },
{ trait_type: "Rarity", value: "Founder" },
],
external_url: "https://ethed.app",
external_url: "https://academy.eipsinsight.com",
};

console.log("Uploading Genesis metadata template");
Expand Down
2 changes: 1 addition & 1 deletion src/__tests__/genesis-assets.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { GENESIS_PIONEER_IMAGE_URI, GENESIS_PIONEER_METADATA_URI } from '@/lib/g

describe('genesis assets', () => {
it('requires genesis image to be pinned or PINATA_JWT present (enforced in CI/production)', () => {
const placeholder = 'ipfs://QmEthEdPioneer1' as string;
const placeholder = 'ipfs://QmEIPsInsightPioneer1' as string;
const pinned = typeof GENESIS_PIONEER_IMAGE_URI === 'string' && GENESIS_PIONEER_IMAGE_URI !== placeholder;

// Only enforce pinning in CI or production builds; local dev uses a bundled fallback image.
Expand Down
4 changes: 2 additions & 2 deletions src/app/(public)/_components/features.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ const iconPulse = {
hover: { scale: 1.12, filter: 'drop-shadow(0 0 16px #22d3ee)', transition: { yoyo: 2, duration: 0.35 } },
};

export default function EthEdFeatures() {
export default function EIPsFeatures() {
return (
<section className="relative py-14">
<div className="mx-auto max-w-screen-xl px-4 md:px-8">
Expand All @@ -91,7 +91,7 @@ export default function EthEdFeatures() {
Built for <span className="bg-gradient-to-r from-cyan-400 to-teal-400 bg-clip-text text-transparent">Web3 Learners</span>
</h3>
<p className="font-geist text-slate-400 mt-3 text-lg">
EthEd combines on-chain rewards, AI support, and ENS identity to help everyone master blockchain—securely and transparently.
EIPsInsight Academy combines on-chain rewards, AI support, and ENS identity to help everyone master blockchain—securely and transparently.
</p>
</motion.div>
<div
Expand Down
8 changes: 4 additions & 4 deletions src/app/(public)/_components/footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export default function Footer() {
<div className="container mx-auto grid grid-cols-1 md:grid-cols-4 gap-8">
<div className="space-y-4 col-span-1 md:col-span-2">
<Link href="/" className="text-2xl font-bold bg-gradient-to-r from-cyan-500 to-blue-500 dark:from-cyan-400 dark:to-blue-400 bg-clip-text text-transparent">
EthEd
EIPsInsight Academy
</Link>
<p className="text-muted-foreground max-w-sm">
Blockchain education made interactive, verifiable, and rewarding.
Expand All @@ -32,18 +32,18 @@ export default function Footer() {
<Link href="/terms" className="text-muted-foreground hover:text-primary transition-colors">Terms of Service</Link>
<Link href="/donate" className="text-muted-foreground hover:text-emerald-500 transition-colors">Donate</Link>
<div className="flex space-x-4 pt-2">
<Link href="https://github.com/ethed" target="_blank" rel="noopener noreferrer" aria-label="EthEd on GitHub" className="text-muted-foreground hover:text-foreground transition-colors">
<Link href="https://github.com/eipsinsight" target="_blank" rel="noopener noreferrer" aria-label="EIPsInsight Academy on GitHub" className="text-muted-foreground hover:text-foreground transition-colors">
<Github className="h-5 w-5" />
</Link>
<Link href="https://twitter.com/ethed" target="_blank" rel="noopener noreferrer" aria-label="EthEd on Twitter" className="text-muted-foreground hover:text-primary transition-colors">
<Link href="https://twitter.com/eipsinsight" target="_blank" rel="noopener noreferrer" aria-label="EIPsInsight Academy on Twitter" className="text-muted-foreground hover:text-primary transition-colors">
<Twitter className="h-5 w-5" />
</Link>
</div>
</nav>
</div>
</div>
<div className="container mx-auto mt-12 pt-8 border-t border-border/50 text-center text-muted-foreground text-sm">
© {new Date().getFullYear()} EthEd. Built for the decentralized future.
© {new Date().getFullYear()} EIPsInsight Academy. Built for the decentralized future.
</div>
</footer>
);
Expand Down
39 changes: 19 additions & 20 deletions src/app/(public)/_components/navbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,22 @@ export default function Navbar() {

<nav aria-label="Main navigation" className="w-full border-b border-border/50 bg-background/80 backdrop-blur-md">
<div className="container mx-auto px-4">
<div className="relative flex h-16 items-center">
<div className="flex h-16 items-center justify-between gap-8">

{/* Left Section - Navigation Links */}
<div className="absolute left-0 flex items-center space-x-4 md:space-x-6">
{/* Left Section - Logo + Navigation Links */}
<div className="flex items-center gap-8">
{/* Logo */}
<div className="flex-shrink-0">
<Link href="/" className="group relative block">
<Logo />

{/* Optional: Floating particles effect */}
<div className="absolute -top-2 -right-2 w-1 h-1 bg-emerald-400 rounded-full opacity-0 group-hover:opacity-100 group-hover:animate-ping transition-all duration-300" />
<div className="absolute -bottom-2 -left-2 w-1 h-1 bg-cyan-400 rounded-full opacity-0 group-hover:opacity-100 group-hover:animate-ping transition-all duration-500" />
</Link>
</div>

{/* Navigation Links (hidden on mobile) */}
<div className="hidden md:flex items-center space-x-6">
<Link
href="/learn"
Expand Down Expand Up @@ -141,19 +153,8 @@ export default function Navbar() {
</div>
</div>

{/* Center Logo - Absolutely positioned for perfect centering */}
<div className="absolute left-1/2 transform -translate-x-1/2">
<Link href="/" className="group relative block">
<Logo />

{/* Optional: Floating particles effect */}
<div className="absolute -top-2 -right-2 w-1 h-1 bg-emerald-400 rounded-full opacity-0 group-hover:opacity-100 group-hover:animate-ping transition-all duration-300" />
<div className="absolute -bottom-2 -left-2 w-1 h-1 bg-cyan-400 rounded-full opacity-0 group-hover:opacity-100 group-hover:animate-ping transition-all duration-500" />
</Link>
</div>

{/* Right Section - Auth */}
<div className="absolute right-0 flex items-center space-x-4">
{/* Right Section - Auth & Theme */}
<div className="flex items-center space-x-4 flex-shrink-0">
<ThemeToggle />
{status === "loading" ? (
<div className="h-8 w-20 bg-slate-300 rounded animate-pulse" />
Expand Down Expand Up @@ -292,11 +293,10 @@ export default function Navbar() {
</Button>
</div>
)}
</div>
</div>
</div>
</div>

{/* Mobile Menu with animations */}
</nav>
{isMobileMenuOpen && (
<div className="md:hidden border-t border-slate-200/20 bg-background/95 backdrop-blur animate-in slide-in-from-top-2 duration-200">
<div className="container py-4 space-y-4">
Expand Down Expand Up @@ -429,7 +429,6 @@ export default function Navbar() {
</div>
</div>
)}
</nav>
</div>
);
}
8 changes: 4 additions & 4 deletions src/app/(public)/courses/eips-101/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,11 @@ const courseModules = [
{
id: 8,
title: 'Draft Your First EIP',
description: 'Hands-on workshop using EthEd Proposal Builder',
description: 'Hands-on workshop using EIPsInsight Academy Proposal Builder',
duration: '45 min',
type: 'interactive',
completed: false,
content: '/EIPs101.md#9-drafting-a-first-eip-with-etheds-proposal-builder'
content: '/EIPs101.md#9-drafting-a-first-eip-with-eipsinsight-proposal-builder'
},
{
id: 9,
Expand Down Expand Up @@ -157,7 +157,7 @@ export default function EIPs101Course() {
EIPs 101: From First Principles to First Proposal
</h1>
<p className="text-lg text-muted-foreground mb-6">
Master Ethereum Improvement Proposals from basics to writing your first EIP using EthEd&apos;s tools.
Master Ethereum Improvement Proposals from basics to writing your first EIP using EIPsInsight Academy&apos;s tools.
</p>

<div className="flex flex-wrap gap-4 mb-6">
Expand Down Expand Up @@ -326,7 +326,7 @@ export default function EIPs101Course() {
</div>
<div className="flex items-start gap-3">
<CheckCircle className="h-5 w-5 text-emerald-400 mt-0.5 flex-shrink-0" />
<span className="text-slate-300">Draft your first EIP using EthEd&apos;s Proposal Builder</span>
<span className="text-slate-300">Draft your first EIP using EIPsInsight Academy&apos;s Proposal Builder</span>
</div>
<div className="flex items-start gap-3">
<CheckCircle className="h-5 w-5 text-emerald-400 mt-0.5 flex-shrink-0" />
Expand Down
18 changes: 9 additions & 9 deletions src/app/(public)/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ import React from 'react';
import { ArrowRight, ChevronRight, GraduationCap } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { motion } from 'motion/react';
import EthEdFeatures from './_components/features';
import EIPsFeatures from './_components/features';
import Link from 'next/link';
import { Rocket, Globe } from 'lucide-react';
import HowItWorks from './_components/how-it-works';
import Stats from './_components/stats';

export default function EthEdHero() {
export default function AcademyHero() {
return (
<div className="bg-slate-950 relative w-full overflow-hidden min-h-screen">
{/* Enhanced background effects */}
Expand Down Expand Up @@ -42,7 +42,7 @@ export default function EthEdHero() {
New
</span>
<span>
EthEd Platform launched!
EIPsInsight Academy launched!
</span>
<ChevronRight className="text-cyan-400/70 h-3 w-3" />
</div>
Expand All @@ -57,7 +57,7 @@ export default function EthEdHero() {
>
Get Rewarded for Learning <br />
<span className="from-cyan-400 via-teal-400 to-blue-500 bg-gradient-to-r bg-clip-text text-transparent">
On EthEd, your progress is owned by you.
On EIPsInsight Academy, your progress is owned by you.
</span>
</motion.h1>

Expand All @@ -68,7 +68,7 @@ export default function EthEdHero() {
transition={{ duration: 0.5, delay: 0.2 }}
className="text-slate-300 mx-auto mt-6 max-w-2xl text-center text-lg leading-relaxed"
>
EthEd helps you master blockchain from scratch—guided by AI, powered by real rewards. Earn points, NFT badges, and on-chain certificates as you learn. Sign up instantly (no wallet needed) and claim your unique ENS identity!
EIPsInsight Academy helps you master blockchain from scratch—guided by AI, powered by real rewards. Earn points, NFT badges, and on-chain certificates as you learn. Sign up instantly (no wallet needed) and claim your unique ENS identity!
</motion.p>

{/* CTA Buttons */}
Expand Down Expand Up @@ -129,7 +129,7 @@ export default function EthEdHero() {
<div className="h-2.5 w-2.5 rounded-full bg-green-400/60"></div>
</div>
<div className="bg-slate-950/50 text-slate-400 text-[10px] font-mono rounded-md px-3 py-1 border border-white/5">
https://ethed.app
https://academy.eipsinsight.com
</div>
<div className="w-12"></div>
</div>
Expand All @@ -142,7 +142,7 @@ export default function EthEdHero() {
<GraduationCap className="w-10 h-10 text-slate-900" />
</div>
</div>
<h3 className="text-2xl font-bold text-white tracking-tight">EthEd Learning Platform</h3>
<h3 className="text-2xl font-bold text-white tracking-tight">EIPsInsight Academy Learning Platform</h3>
<p className="text-slate-400 text-sm max-w-xs mx-auto">Master Ethereum standards with AI-guided precision and verifiable rewards.</p>

<div className="flex items-center justify-center gap-2 mt-6">
Expand Down Expand Up @@ -172,7 +172,7 @@ export default function EthEdHero() {
</div>
</div>

{/* Floaties updated to match EthEd style */}
{/* Floaties updated to match EIPsInsight Academy style */}
<div className="absolute -top-6 -right-6 h-14 w-14 rounded-2xl border border-cyan-400/20 bg-slate-950/80 p-3 shadow-cyan-glow backdrop-blur-md animate-bounce" style={{ animationDuration: '4s' }}>
<div className="bg-gradient-to-br from-cyan-400 to-blue-500 h-full w-full rounded-lg opacity-40"></div>
</div>
Expand All @@ -197,7 +197,7 @@ export default function EthEdHero() {
</div>
</div>

<EthEdFeatures/>
<EIPsFeatures/>

{/* How it works + Stats */}
<HowItWorks />
Expand Down
2 changes: 1 addition & 1 deletion src/app/(public)/privacy/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export default function PrivacyPage() {
<section>
<h2 className="text-xl font-semibold text-white">5. Contact Us</h2>
<p>
If you have any questions about this Privacy Policy, please contact us at privacy@ethed.app.
If you have any questions about this Privacy Policy, please contact us at privacy@eipsinsight.com.
</p>
</section>
</CardContent>
Expand Down
Loading
Loading