Skip to content

Commit adf52da

Browse files
committed
2 more projects + Slider for projects using TinySlider
1 parent 978dcbc commit adf52da

4 files changed

Lines changed: 176 additions & 122 deletions

File tree

src/css/components.css

Lines changed: 109 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -61,107 +61,151 @@
6161
}
6262

6363
/* --- Project Section CSS --- */
64-
65-
/* Optional: Use CSS Grid for a multi-column layout */
66-
67-
.projects-container {
68-
display: grid;
69-
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); /* Responsive columns */
70-
gap: 25px; /* Space between project cards */
64+
/* Container for the slider, if you used one */
65+
.project-slider-container {
66+
position: relative; /* For positioning custom arrows if you add them later */
67+
max-width: 1200px; /* Or your preferred max width for the slider area */
68+
margin: 30px auto; /* Center the slider container */
69+
padding: 0 50px; /* Add padding on the sides for default arrows to sit in */
70+
/* If default arrows are still outside, increase this padding */
7171
}
7272

73+
/* The actual slider generated by Tiny Slider might have class tns-outer, tns-inner, tns-slider */
74+
/* Your project items are the slides */
7375
.project-item {
74-
background-color: rgba(26, 26, 46, 0.7); /* Slightly different background for project items */
76+
background-color: rgba(26, 26, 46, 0.85); /* Darker, semi-transparent card */
7577
color: #dcdcdc;
76-
padding: 20px;
77-
margin-bottom: 15px;
78-
border: 1px solid #444;
79-
border-radius: 6px;
78+
padding: 25px;
79+
border: 1px solid #444; /* Darker border for dark theme */
80+
border-radius: 8px; /* Increased radius */
8081
transition: transform 0.3s ease, box-shadow 0.3s ease;
82+
box-sizing: border-box;
83+
84+
/* Flexbox for internal layout of each card */
85+
display: flex;
86+
flex-direction: column;
87+
justify-content: space-between; /* Pushes elements apart vertically */
88+
/* Set a fixed height for uniform cards, or let content dictate height */
89+
margin-top: 20px;
90+
/*margin-left: 2px;*/
91+
margin-right: 2px;
92+
height: 500px; /* Or auto, or a min-height. Adjust this! */
93+
/* If you want variable heights, set autoHeight: true in JS init */
8194
}
8295

8396
.project-item:hover {
84-
box-shadow: 0 5px 15px rgba(0,0,0,0.1); /* Enhanced shadow on hover */
85-
transform: translateY(-5px); /* Slightly lift card on hover */
97+
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.35);
98+
transform: translateY(-5px);
8699
}
87100

88101
.project-item h3 {
89102
margin-top: 0;
90103
color: #e8e8e8;
91104
margin-bottom: 10px;
105+
font-size: 1.3em; /* Adjust for card width */
106+
}
107+
108+
.project-item p { /* Paragraphs within the project item */
109+
font-size: 0.9em;
110+
line-height: 1.6;
111+
margin-bottom: 15px;
112+
flex-grow: 1; /* Allow paragraph to take up available space */
113+
}
114+
115+
.project-image {
116+
width: 100%;
117+
height: 180px; /* Adjust fixed height for images */
118+
object-fit: contain; /* Or 'cover' if you prefer cropping to fill */
119+
display: block;
120+
margin-bottom: 15px;
121+
border-radius: 4px;
122+
border: 1px solid #333;
123+
background-color: #1a1a2e;
124+
}
125+
126+
.project-links {
127+
margin-top: auto; /* Pushes links to the bottom of the card */
92128
}
93129

94-
/* Style for project links */
95130
.project-links a {
96131
display: inline-block;
97-
margin-right: 15px;
98-
margin-top: 10px; /* Space above links */
132+
margin-right: 10px; /* Reduced margin */
133+
margin-top: 10px;
99134
text-decoration: none;
100-
color: #a78bfa; /* Link color */
101-
font-weight: 600; /* Slightly bolder */
102-
padding-bottom: 3px; /* Space for border */
103-
border-bottom: 2px solid transparent; /* Prepare for hover effect */
135+
color: #a78bfa;
136+
font-weight: 500; /* Slightly less bold */
137+
padding-bottom: 2px;
138+
font-size: 0.9em; /* Smaller link text */
139+
border-bottom: 1px solid transparent;
104140
transition: border-color 0.2s ease-in-out;
105141
}
106142

107143
.project-links a:hover {
108-
border-bottom-color: #a78bfa; /* Underline effect on hover */
144+
border-bottom-color: #a78bfa;
109145
}
110146

111-
/* Optional: Style for technology tags */
112147
.project-tags {
113-
margin-top: 15px;
148+
margin-top: 10px; /* Reduced margin */
149+
flex-wrap: wrap; /* Ensure tags wrap if many */
150+
display: flex; /* For better alignment if tags wrap */
114151
}
115152

116153
.project-tags span {
117-
display: inline-block;
118-
background-color: #2a2a3a; /* Light grey tag background */
119-
color: #ccc; /* Darker grey text */
120-
padding: 4px 12px; /* Tag padding */
121-
border-radius: 15px; /* Pill shape */
122-
font-size: 0.8em;
154+
background-color: #2a2a3a;
155+
color: #ccc;
156+
padding: 3px 10px; /* Slightly smaller padding */
157+
border-radius: 12px; /* More pill-like */
158+
font-size: 0.75em; /* Smaller tags */
123159
font-weight: 500;
124-
margin-right: 6px;
125-
margin-bottom: 6px; /* Allow tags to wrap */
160+
margin-right: 5px;
161+
margin-bottom: 5px;
162+
}
163+
164+
/* Styles for Tiny Slider Controls - these make the default text arrows look like icons */
165+
.tns-controls button {
166+
font-size: 0 !important; /* Hide "prev" and "next" text */
167+
width: 40px !important;
168+
height: 40px !important;
169+
border-radius: 50% !important;
170+
background-color: rgba(40, 40, 60, 0.6) !important;
171+
border: 1px solid rgba(255, 255, 255, 0.2) !important;
172+
position: absolute !important;
173+
top: 50% !important;
174+
transform: translateY(-50%) !important;
175+
z-index: 20 !important;
176+
padding: 0 !important;
177+
display: flex !important;
178+
align-items: center !important;
179+
justify-content: center !important;
180+
color: white !important; /* For actual icon if using ::before */
181+
}
182+
183+
.tns-controls button:hover {
184+
background-color: rgba(70, 70, 90, 0.7) !important;
185+
}
186+
187+
.tns-controls button[data-controls="prev"] {
188+
left: 5px !important; /* Adjust to be inside padding or just outside */
189+
}
190+
.tns-controls button[data-controls="prev"]::before {
191+
content: '\2039'; /* Left-pointing angle bracket */
192+
font-size: 24px;
193+
font-weight: bold;
126194
}
127195

128-
.project-image {
129-
width: 100%; /* Make image fill container width */
130-
height: 200px; /* << SET A FIXED HEIGHT (e.g., 200px - adjust as needed) */
131-
object-fit: contain; /* << CONTROL HOW IMAGE FITS */
132-
/* --- Choose ONE object-fit value --- */
133-
/* object-fit: cover; */ /* Scales image to cover the box, may crop parts */
134-
/* object-fit: contain; */ /* Scales image to fit entirely inside, may add whitespace */
135-
/* object-fit: scale-down; */ /* Like 'contain' but won't upscale small images */
136-
137-
/* Keep other styles */
138-
display: block;
139-
margin-bottom: 15px;
140-
border-radius: 4px;
141-
border: 1px solid #ddd;
142-
background-color: #1a1a2e; /* Optional: Add a subtle background for 'contain' */
196+
.tns-controls button[data-controls="next"] {
197+
right: 5px !important; /* Adjust */
198+
}
199+
.tns-controls button[data-controls="next"]::before {
200+
content: '\203A'; /* Right-pointing angle bracket */
201+
font-size: 24px;
202+
font-weight: bold;
143203
}
144204

205+
/* Ensure the main #projects intro paragraph is still centered */
145206
#projects > p:first-of-type {
146207
text-align: center;
147-
margin-bottom: 25px; /* Add margin below it before the project cards */
148-
}
149-
150-
.project-item.inactive-project {
151-
opacity: 0.75; /* Make it slightly faded */
152-
/* background-color: #f5f5f5; */ /* Optional: Slightly duller background */
153-
/* border-style: dashed; */ /* Optional: Dashed border */
154-
}
155-
156-
.project-item.inactive-project:hover {
157-
/* Optional: Reduce hover effect for inactive projects */
158-
box-shadow: 0 2px 5px rgba(0,0,0,0.08);
159-
transform: translateY(0); /* No lift on hover */
160-
opacity: 0.85; /* Slightly less faded on hover */
161-
}
162-
163-
.project-item.inactive-project .project-image {
164-
/* filter: grayscale(80%); */ /* Optional: Make image grayscale */
208+
margin-bottom: 30px;
165209
}
166210
/* --- End of Inactive Project CSS --- */
167211

src/index.html

Lines changed: 32 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<link rel="stylesheet" href="css/layout.css">
1111
<link rel="stylesheet" href="css/navigation.css">
1212
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" integrity="sha512-SnH5WK+bZxgPHs44uWIX+LLJAJ9/2PkPKZ5QiAj6Ta86w+fsb2TkcmfRyVX3pBnMFcV7oQPJkl9QevSCWr3W6A==" crossorigin="anonymous" referrerpolicy="no-referrer" />
13+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.4/tiny-slider.css">
1314

1415
<link rel="icon" type="image/png" sizes="32x32" href="images/favicon-32x32.png">
1516
</head>
@@ -120,54 +121,39 @@ <h3>Skills</h3>
120121

121122
<section id="projects">
122123
<h2>My Projects</h2>
123-
<p><b>Here's a selection of projects I've worked on.</b></p>
124-
125-
<div class="projects-container">
126-
<article class="project-item">
127-
<img src="images/obsidian-discordrpc-preview.png" alt="Obsidian Discord RPC Plugin" class="project-image">
128-
129-
<h3>Discord RPC for Obsidian</h3>
130-
131-
<p>
132-
An Obsidian plugin to display your current note activity in Discord using Rich Presence. Built using Typescript.
133-
</p>
134-
135-
<div class="project-links">
136-
<a href="https://github.com/Apoo711/obsidian-discordrpc" target="_blank" rel="noopener noreferrer">Source Code</a>
124+
<p>Here's a selection of my projects.</p>
125+
126+
<div class="project-slider-container">
127+
<div class="project-slider">
128+
<div class="project-item">
129+
<img src="/images/obsidian-discordrpc-preview.png" alt="Obsidian Discord RPC Plugin" class="project-image">
130+
<h3>Discord RPC for Obsidian</h3>
131+
<p>An Obsidian plugin to display current note activity in Discord using Rich Presence. Built using TypeScript.</p>
132+
<div class="project-links"><a href="https://github.com/Apoo711/obsidian-discordrpc" target="_blank" rel="noopener noreferrer">Source Code</a></div>
133+
<div class="project-tags"><span>Obsidian</span><span>Plugin</span><span>TypeScript</span></div>
137134
</div>
138-
139-
<div class="project-tags">
140-
<span>Obsidian</span>
141-
<span>Plugin</span>
142-
<span>TypeScript</span>
143-
<span>Discord</span>
135+
<div class="project-item inactive-project">
136+
<img src="/images/ayano-bot-preview.png" alt="Ayano Discord Bot" class="project-image">
137+
<h3>Ayano Discord Bot <span class="status-inactive">(Inactive)</span></h3>
138+
<p>A multi-functional Discord bot. Features: Moderation, Games, Utility. Developed using C#.<br><em>Please note: This project is no longer actively maintained.</em></p>
139+
<div class="project-links"><a href="https://github.com/Ayano-Discord/Ayano" target="_blank" rel="noopener noreferrer">Source Code</a></div>
140+
<div class="project-tags"><span>C#</span><span>Discord</span><span>Bot</span><span>Archived</span></div>
144141
</div>
145-
</article>
146-
147-
<article class="project-item inactive-project">
148-
149-
<img src="images/ayano-bot-preview.png" alt="Ayano Discord Bot" class="project-image">
150-
151-
<h3>Ayano Discord Bot <span class="status-inactive">(Inactive)</span></h3>
152-
153-
<p>
154-
A multi-functional Discord bot named Ayano. Features include Moderation, Games, and Utility. Developed using C#.
155-
<br><em>Please note: This project is no longer actively maintained.</em>
156-
</p>
157-
158-
<div class="project-links">
159-
<a href="https://github.com/Ayano-Discord/Ayano" target="_blank" rel="noopener noreferrer">Source Code</a>
142+
<div class="project-item">
143+
<img src="/images/favicon-32x32.png" alt="This Portfolio Website" class="project-image">
144+
<h3>This Portfolio Website</h3>
145+
<p>The personal website you are currently viewing. Built with Eleventy, HTML, CSS, and JavaScript, showcasing various projects and resources.</p>
146+
<div class="project-links"><a href="https://github.com/Apoo711/apoo711.github.io" target="_blank" rel="noopener noreferrer">Source Code</a></div>
147+
<div class="project-tags"><span>Eleventy</span><span>HTML</span><span>CSS</span><span>JavaScript</span></div>
160148
</div>
161-
162-
163-
<div class="project-tags">
164-
<span>C#</span>
165-
<span>Discord</span>
166-
<span>Bot</span>
149+
<div class="project-item">
150+
<img src="/images/favicon-32x32.png" alt="Obsidian 3D Graph Plugin" class="project-image">
151+
<h3>Obsidian 3D Graph Plugin (Planned)</h3>
152+
<p>A planned plugin for Obsidian to visualize notes and their connections in an interactive 3D graph.</p>
153+
<div class="project-links"><a href="#" target="_blank" rel="noopener noreferrer">Source Code (Coming Soon)</a></div>
154+
<div class="project-tags"><span>Obsidian</span><span>Plugin</span><span>3D</span><span>Data Visualization</span></div>
167155
</div>
168-
</article>
169-
170-
156+
</div>
171157
</div>
172158
</section>
173159

@@ -193,7 +179,9 @@ <h2>Get In Touch</h2>
193179
<p>&copy; 2025 Aryan Gupta. All rights reserved.</p>
194180
</footer>
195181
<script src="https://cdn.jsdelivr.net/npm/tsparticles@2.12.0/tsparticles.bundle.min.js"></script>
182+
<script src="https://cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.2/min/tiny-slider.js"></script>
196183
<script src="js/particles-config.js"></script>
197184
<script src="js/main.js"></script>
185+
<script src="js/slider.js"></script>
198186
</body>
199187
</html>

src/js/main.js

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,16 @@
1-
// File: js/main.js
2-
3-
// Wait for the HTML document to be fully loaded before running script
41
document.addEventListener('DOMContentLoaded', () => {
52

6-
const header = document.querySelector('header'); // Get the header element
7-
const scrollThreshold = 50; // How many pixels down to scroll before changing header (adjust if needed)
3+
const header = document.querySelector('header');
4+
const scrollThreshold = 50;
85

9-
// Function to add/remove the 'header-scrolled' class
106
const handleScroll = () => {
117
if (window.scrollY > scrollThreshold) {
12-
// If scrolled past the threshold, add the class
138
header.classList.add('header-scrolled');
149
} else {
15-
// Otherwise, remove the class
1610
header.classList.remove('header-scrolled');
1711
}
1812
};
1913

20-
// Listen for scroll events on the window
2114
window.addEventListener('scroll', handleScroll);
22-
23-
// Call the function once on load to set the initial state correctly
24-
// (in case the page loads already scrolled down)
2515
handleScroll();
26-
2716
});

src/js/slider.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
document.addEventListener('DOMContentLoaded', () => {
2+
const projectSliderElement = document.querySelector('.project-slider');
3+
if (projectSliderElement) {
4+
var slider = tns({
5+
container: '.project-slider',
6+
items: 1,
7+
slideBy: 1,
8+
autoplay: false,
9+
controls: true, // Use true to get default controls
10+
// controlsText: ['\2039', '\203A'], // Or use Font Awesome icons here
11+
fixedWidth: 325,
12+
nav: false, // Disable dot navigation
13+
gutter: 15, // Space between items
14+
edgePadding: 20, // Padding at the edges of the viewport
15+
mouseDrag: true,
16+
loop: true, // Set to true if you want infinite looping
17+
responsive: {
18+
768: {
19+
items: 2,
20+
// slideBy: 1, // Or 1
21+
// center: true,
22+
edgePadding: 40
23+
},
24+
1024: {
25+
items: 2,
26+
// slideBy: 1, // Or 1
27+
// center: true,
28+
edgePadding: 50
29+
}
30+
}
31+
});
32+
}
33+
});

0 commit comments

Comments
 (0)