Skip to content
Draft
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
31 changes: 30 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,31 @@
# ProTop.Iop
@

A competitive gaming leaderboard and social platform.

## Pages

| File | Description |
|------|-------------|
| `profile.html` | User profile page layout |

## Structure

```
ProTop.Iop/
├── profile.html # User profile page
├── styles/
│ └── profile.css # Profile page styles
└── scripts/
└── profile.js # Profile page interactivity (tab switching)
```

## User Profile Page

The profile page (`profile.html`) includes:

- **Profile hero** – avatar with online status indicator, display name, handle, bio, location, and website
- **Stats bar** – follower count, following count, post count, and global rank
- **Tabbed content** – Posts, Achievements, and Activity tabs with smooth client-side switching
- **Responsive layout** – adapts cleanly to mobile viewports
- **Dark theme** – uses CSS custom properties for consistent theming

200 changes: 200 additions & 0 deletions profile.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>User Profile – ProTop</title>
<link rel="stylesheet" href="styles/profile.css" />
</head>
<body>
<header class="site-header">
<div class="container">
<a href="/" class="logo">ProTop</a>
<nav class="site-nav">
<a href="#">Home</a>
<a href="#">Leaderboard</a>
<a href="#" class="active">Profile</a>
</nav>
</div>
</header>

<main class="container">
<!-- Profile Hero -->
<section class="profile-hero">
<div class="avatar-wrapper">
<img
class="avatar"
src="https://ui-avatars.com/api/?name=Alex+Morgan&size=128&background=6366f1&color=fff"
alt="Alex Morgan's avatar"
/>
<span class="status-badge online" title="Online"></span>
</div>

<div class="profile-info">
<h1 class="profile-name">Alex Morgan</h1>
<p class="profile-handle">@alexmorgan</p>
<p class="profile-bio">
Competitive gamer &amp; speedrunner. Top 1% globally in three titles.
Coffee enthusiast ☕ and open-source contributor.
</p>

<div class="profile-meta">
<span>📍 San Francisco, CA</span>
<span>🔗 <a href="#">alexmorgan.gg</a></span>
<span>📅 Joined March 2022</span>
</div>
</div>

<div class="profile-actions">
<button class="btn btn-primary">Follow</button>
<button class="btn btn-secondary">Message</button>
</div>
</section>

<!-- Stats Bar -->
<section class="stats-bar">
<div class="stat">
<span class="stat-value">1,284</span>
<span class="stat-label">Followers</span>
</div>
<div class="stat">
<span class="stat-value">342</span>
<span class="stat-label">Following</span>
</div>
<div class="stat">
<span class="stat-value">87</span>
<span class="stat-label">Posts</span>
</div>
<div class="stat">
<span class="stat-value">#4</span>
<span class="stat-label">Global Rank</span>
</div>
</section>

<!-- Tabs -->
<div class="tabs">
<button class="tab active" data-tab="posts">Posts</button>
<button class="tab" data-tab="achievements">Achievements</button>
<button class="tab" data-tab="activity">Activity</button>
</div>

<!-- Tab Content: Posts -->
<section class="tab-content active" id="tab-posts">
<div class="post-grid">
<article class="post-card">
<div class="post-header">
<img
class="post-avatar"
src="https://ui-avatars.com/api/?name=Alex+Morgan&size=40&background=6366f1&color=fff"
alt=""
/>
<div>
<strong>Alex Morgan</strong>
<time datetime="2026-03-28">Mar 28, 2026</time>
</div>
</div>
<p>Just broke my personal record in SpeedBlast — 2:14.33! 🔥 Who's coming for me?</p>
<div class="post-footer">
<span>❤️ 142</span>
<span>💬 37</span>
<span>🔁 18</span>
</div>
</article>

<article class="post-card">
<div class="post-header">
<img
class="post-avatar"
src="https://ui-avatars.com/api/?name=Alex+Morgan&size=40&background=6366f1&color=fff"
alt=""
/>
<div>
<strong>Alex Morgan</strong>
<time datetime="2026-03-22">Mar 22, 2026</time>
</div>
</div>
<p>Tips for climbing the leaderboard: consistency &gt; grinding. Play 2 hrs focused &gt; 6 hrs distracted.</p>
<div class="post-footer">
<span>❤️ 208</span>
<span>💬 54</span>
<span>🔁 91</span>
</div>
</article>

<article class="post-card">
<div class="post-header">
<img
class="post-avatar"
src="https://ui-avatars.com/api/?name=Alex+Morgan&size=40&background=6366f1&color=fff"
alt=""
/>
<div>
<strong>Alex Morgan</strong>
<time datetime="2026-03-15">Mar 15, 2026</time>
</div>
</div>
<p>Reached top 5 globally for the first time. Long road, worth every hour. 🏆</p>
<div class="post-footer">
<span>❤️ 543</span>
<span>💬 112</span>
<span>🔁 207</span>
</div>
</article>
</div>
</section>

<!-- Tab Content: Achievements -->
<section class="tab-content" id="tab-achievements">
<ul class="achievement-list">
<li class="achievement-item">
<span class="achievement-icon">🥇</span>
<div>
<strong>Global Top 5</strong>
<p>Ranked in the top 5 players worldwide</p>
</div>
</li>
<li class="achievement-item">
<span class="achievement-icon">⚡</span>
<div>
<strong>Speed Demon</strong>
<p>Completed a level under 2:20 in SpeedBlast</p>
</div>
</li>
<li class="achievement-item">
<span class="achievement-icon">🎯</span>
<div>
<strong>Sharpshooter</strong>
<p>95%+ accuracy across 100 matches</p>
</div>
</li>
<li class="achievement-item">
<span class="achievement-icon">📅</span>
<div>
<strong>Consistent</strong>
<p>Logged in for 30 consecutive days</p>
</div>
</li>
</ul>
</section>

<!-- Tab Content: Activity -->
<section class="tab-content" id="tab-activity">
<ul class="activity-feed">
<li><span class="activity-time">2 hours ago</span> Completed a ranked match (+28 pts)</li>
<li><span class="activity-time">Yesterday</span> Earned the "Speed Demon" achievement</li>
<li><span class="activity-time">2 days ago</span> Followed <a href="#">@speedrunnerX</a></li>
<li><span class="activity-time">4 days ago</span> Posted a new record time</li>
<li><span class="activity-time">1 week ago</span> Joined the ProTop Summer League</li>
</ul>
</section>
</main>

<footer class="site-footer">
<div class="container">
<p>© 2026 ProTop · <a href="#">Privacy</a> · <a href="#">Terms</a></p>
</div>
</footer>

<script src="scripts/profile.js"></script>
</body>
</html>
22 changes: 22 additions & 0 deletions scripts/profile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Profile page – tab switching
(function () {
'use strict';

var tabs = document.querySelectorAll('.tab');
var panels = document.querySelectorAll('.tab-content');

function activateTab(targetId) {
tabs.forEach(function (tab) {
tab.classList.toggle('active', tab.dataset.tab === targetId);
});
panels.forEach(function (panel) {
panel.classList.toggle('active', panel.id === 'tab-' + targetId);
});
}

tabs.forEach(function (tab) {
tab.addEventListener('click', function () {
activateTab(tab.dataset.tab);
});
});
}());
Loading