diff --git a/contributor/contributor.css b/contributor/contributor.css new file mode 100644 index 00000000..aa00ec6d --- /dev/null +++ b/contributor/contributor.css @@ -0,0 +1,291 @@ +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + font-family: Arial, sans-serif; + line-height: 1.6; + color: #333; + background-color: #f5f5f5; +} + +.contributor-container { + margin: 0 auto; +} + +/* Hero Section */ +.contributor-hero { + background-image: url('https://images.unsplash.com/photo-1522071820081-009f0129c71c?auto=format&fit=crop&w=2850&q=80'); + background-size: cover; + background-position: center; + height: 70vh; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + position: relative; +} + +.contributor-hero::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.7); +} + +.contributor-hero-content { + position: relative; + z-index: 1; + color: #fff; +} + +.contributor-hero h1 { + font-size: 3.5rem; + margin-bottom: 1rem; +} + +.contributor-hero p { + font-size: 1.5rem; + margin-bottom: 2rem; +} + +/* Buttons */ +.contributor-btn { + display: inline-block; + padding: 0.8rem 1.5rem; + border: none; + border-radius: 5px; + font-size: 1rem; + cursor: pointer; + transition: background-color 0.3s ease; +} + +.contributor-btn-primary { + background-color: #fff; + color: #333; +} + +.contributor-btn-primary:hover { + background-color: #f0f0f0; +} + +.contributor-btn-secondary { + background-color: #333; + color: #fff; +} + +.contributor-btn-secondary:hover { + background-color: #444; +} + +/* Stats Section */ +.contributor-stats { + max-width: 1200px; + margin: 0 auto; + padding: 4rem 0; + text-align: center; +} + +.contributor-stats h2 { + font-size: 2rem; + margin-bottom: 2rem; +} + +.contributor-stats-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 2rem; +} + +.contributor-stat-card { + background-color: #fff; + border: 1px solid #e0e0e0; + border-radius: 10px; + padding: 1.5rem; + text-align: center; +} + +.contributor-stat-card .contributor-icon { + font-size: 2rem; + margin-bottom: 1rem; +} + +.contributor-stat-card h3 { + font-size: 2rem; + margin-bottom: 0.5rem; +} + +.contributor-stat-card p { + color: #666; +} + +/* Contributors Section */ +.contributor-contributors { + max-width: 1200px; + margin: 0 auto; + padding: 4rem 0; + text-align: center; +} + +.contributor-contributors h2 { + font-size: 2rem; + margin-bottom: 2rem; +} + +.contributor-contributors-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 2rem; +} + +.contributor-contributor-card { + background-color: #fff; + border: 1px solid #e0e0e0; + border-radius: 10px; + overflow: hidden; + transition: transform 0.3s ease, box-shadow 0.3s ease; +} + +.contributor-contributor-card:hover { + transform: translateY(-5px); + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1); +} + +.contributor-contributor-card img { + width: 100px; + height: 100px; + border-radius: 50%; + margin: 1.5rem auto; + display: block; + border: 4px solid #f0f0f0; +} + +.contributor-contributor-card h3 { + font-size: 1.2rem; + margin-bottom: 0.5rem; +} + +.contributor-contributor-card p { + color: #666; + margin-bottom: 1rem; +} + +.contributor-contributor-card .contributor-contributions { + background-color: #f0f0f0; + padding: 0.5rem 1rem; + border-radius: 20px; + display: inline-block; + margin-bottom: 1rem; +} + +.contributor-contributor-card .contributor-footer { + background-color: #f9f9f9; + padding: 1rem; + display: flex; + justify-content: space-between; + align-items: center; +} + +.contributor-contributor-card .contributor-footer a { + color: #333; + text-decoration: none; + display: flex; + align-items: center; +} + +.contributor-contributor-card .contributor-footer svg { + margin-right: 0.5rem; +} + +/* Loading Spinner */ +.contributor-loading { + display: flex; + justify-content: center; + align-items: center; + height: 200px; +} + +.contributor-spinner { + border: 4px solid #f3f3f3; + border-top: 4px solid #333; + border-radius: 50%; + width: 40px; + height: 40px; + animation: contributor-spin 1s linear infinite; +} + +@keyframes contributor-spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +/* Call to Action Section */ +.contributor-cta { + background-color: #333; + color: #fff; + padding: 4rem 0; + text-align: center; +} + +.contributor-cta h2 { + font-size: 2rem; + margin-bottom: 1rem; +} + +.contributor-cta p { + font-size: 1.2rem; + margin-bottom: 2rem; +} + +.contributor-cta form { + display: flex; + justify-content: center; + gap: 1rem; + margin-bottom: 1rem; +} + +.contributor-cta input[type="email"] { + padding: 0.8rem; + font-size: 1rem; + border: none; + border-radius: 5px; + width: 300px; +} + +.contributor-notification { + background-color: #4CAF50; + color: white; + padding: 1rem; + border-radius: 5px; + margin-top: 1rem; +} + +.contributor-hidden { + display: none; +} + +/* Responsive Design */ +@media (max-width: 768px) { + .contributor-hero h1 { + font-size: 2.5rem; + } + + .contributor-hero p { + font-size: 1.2rem; + } + + .contributor-cta form { + flex-direction: column; + align-items: center; + } + + .contributor-cta input[type="email"] { + width: 100%; + max-width: 300px; + } +} \ No newline at end of file diff --git a/contributor/contributor.html b/contributor/contributor.html new file mode 100644 index 00000000..04e5c303 --- /dev/null +++ b/contributor/contributor.html @@ -0,0 +1,70 @@ + + + + + + Research Nexas + + + + + + + Home + +
+ +
+
+

Welcome to Imagine_AI/

+

Empowering writers, one commit at a time

+ +
+
+ + +
+

Project Statistics

+
+ +
+
+ + +
+

Meet Our Contributors

+
+ +
+
+
+
+
+ + +
+

Ready to Make an Impact?

+

Join our community and help shape the future with us at Imagine_AI

+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/contributor/contributor.js b/contributor/contributor.js new file mode 100644 index 00000000..f1faabf8 --- /dev/null +++ b/contributor/contributor.js @@ -0,0 +1,108 @@ +// Fetch data from GitHub API +async function fetchData() { + try { + const contributorsResponse = await fetch('https://api.github.com/repos/SurajPratap10/Imagine_AI/contributors'); + const contributorsData = await contributorsResponse.json(); + + const repoResponse = await fetch('https://api.github.com/repos/SurajPratap10/Imagine_AI'); + const repoData = await repoResponse.json(); + + return { contributors: contributorsData, repoStats: repoData }; + } catch (error) { + console.error('Error fetching data:', error); + return { contributors: [], repoStats: {} }; + } +} + +// Render stats +function renderStats(repoStats, contributorsCount) { + const statsGrid = document.getElementById('statsGrid'); + const stats = [ + { label: 'Contributors', value: contributorsCount, icon: 'users' }, + { label: 'Total Contributions', value: repoStats.contributors?.reduce((sum, contributor) => sum + contributor.contributions, 0) || 0, icon: 'git-commit' }, + { label: 'GitHub Stars', value: repoStats.stargazers_count || 0, icon: 'star' }, + { label: 'Forks', value: repoStats.forks_count || 0, icon: 'git-branch' } + ]; + + statsGrid.innerHTML = stats.map(stat => ` +
+
${getIcon(stat.icon)}
+

${stat.value}

+

${stat.label}

+
+ `).join(''); +} + +// Render contributors +function renderContributors(contributors) { + const contributorsGrid = document.getElementById('contributorsGrid'); + contributorsGrid.innerHTML = contributors.map(contributor => ` +
+ ${contributor.login} +

${contributor.login}

+

${contributor.type}

+
${contributor.contributions} contributions
+ +
+ `).join(''); +} + +// Helper function to get icons (simplified version) +function getIcon(name) { + const icons = { + 'users': '', + 'git-commit': '', + 'star': '', + 'git-branch': '', + 'external-link': '', + 'github': '' + }; + return icons[name] || ''; +} + +// Initialize the page +async function init() { + const loading = document.getElementById('loading'); + const contributorsGrid = document.getElementById('contributorsGrid'); + + loading.style.display = 'flex'; + contributorsGrid.style.display = 'none'; + + const { contributors, repoStats } = await fetchData(); + + renderStats(repoStats, contributors.length); + renderContributors(contributors); + + loading.style.display = 'none'; + contributorsGrid.style.display = 'grid'; +} + +// Handle form submission +document.getElementById('subscribeForm').addEventListener('submit', function(e) { + e.preventDefault(); + const email = document.getElementById('emailInput').value; + const notification = document.getElementById('notification'); + + notification.textContent = `Thank you for subscribing with ${email}. We'll keep you updated!`; + notification.classList.remove('hidden'); + + document.getElementById('emailInput').value = ''; + + setTimeout(() => { + notification.classList.add('hidden'); + }, 5000); +}); + +// Scroll to contribute section +function scrollToContribute() { + document.getElementById('contribute').scrollIntoView({ behavior: 'smooth' }); +} + +// Initialize the page when the DOM is loaded +document.addEventListener('DOMContentLoaded', init); \ No newline at end of file diff --git a/index.js b/index.js index 1a3dbc4b..02138caf 100644 --- a/index.js +++ b/index.js @@ -20,7 +20,7 @@ app.use( resave: false, saveUninitialized: true, secret: "SECRET", - }), + }) ); app.use(passport.initialize()); app.use(passport.session()); @@ -83,13 +83,13 @@ passport.use( // Handle authentication errors return done(error, false); } - }, - ), + } + ) ); app.get( "/auth/google", - passport.authenticate("google", { scope: ["profile", "email"] }), + passport.authenticate("google", { scope: ["profile", "email"] }) ); app.get( @@ -98,10 +98,15 @@ app.get( function (req, res) { // Successful authentication, redirect success. res.redirect("/success"); - }, + } ); //STATIC FOLDER: app.use(express.static(path.join(__dirname, "public"))); +app.use(express.static(path.join(__dirname, "contributor"))); + +app.get("/file", (req, res) => { + res.sendFile(path.join(__dirname, "contributor", "contributor.html")); +}); app.use("/openai", require("./routes/openaiRoutes")); app.use("/auth", require("./routes/auth.js")); @@ -109,7 +114,7 @@ app.use("/send-feedback", require("./routes/feedback.js")); app.use(viewRoutes); app.listen(process.env.PORT, () => - console.log(`Server started on port ${port}`), + console.log(`Server started on port ${port}`) ); // Connecting to DB diff --git a/views/includes/footer.ejs b/views/includes/footer.ejs index a0678d13..50da4338 100644 --- a/views/includes/footer.ejs +++ b/views/includes/footer.ejs @@ -46,6 +46,7 @@
About Us
Contact us
Privacy Policy
+
Our Contributors
Subscribe Us