Skip to content

Commit 8ba1cae

Browse files
authored
Merge branch 'master' into addon-bug
2 parents ecc0030 + fc6922c commit 8ba1cae

7 files changed

Lines changed: 106 additions & 61 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
title: "Hacktoberfest Prep 2025: Design with Meshery"
3+
description: "Prepare for Hacktoberfest with Layer5 MeshMates and Maintainers. Join seasoned open source maintainers, hack through easy issues, and grow your skills. Discover Newcomers resources and explore the Layer5 Community Handbook."
4+
thumbnail:
5+
darkthumbnail:
6+
date: 2025-00-03
7+
eurl:
8+
type: Event
9+
speakers: []
10+
published: false
11+
upcoming: true
12+
register: true
13+
---
14+
15+
import { Link } from "gatsby" ;
16+
// import preptemberslides from "./hacktoberfest-prep-2024-extending-meshery-models.pdf"
17+
import hacktoberfestBadge from "./layer5-hacktoberfest11-badge-large.png";
18+
19+
<p>
20+
<Link to="/programs/hacktoberfest">Hacktoberfest</Link> is just around the corner. You'd be surprised to know how small changes can make a big impact on a project. The more a project scales, the easier it is for small errors to live within it. You can make a real difference by fixing these relatively easier issues and continue to grow from there.
21+
</p>
22+
23+
<p>As in years past, Layer5 has a number of different projects and a variety of technologies for participants to choose from. Our Hacktoberfest theme for 2025 will focus Design w. <Link to="/cloud-native-management/meshery">Meshery</Link> is an extensible, self-service platform for collaborative infrastructure management. Be sure to understand the <Link to="/blog/meshery/comparing-meshery-models-and-meshery-designs">difference between Meshery Models and Meshery Designs</Link>. The Meshery project is looking for contributors to extend these models to support new cloud native infrastructure and their features.</p>
24+
25+
<p>
26+
Prepare for Hacktoberfest and ready yourself for contributing to CNCF projects the easy way with Layer5 <Link to="/community/meshmates">MeshMates</Link> and Maintainers. Spend an hour with seasoned, open source maintainers and hack your way through. To get a head start, see our <Link to="/community/newcomers">Newcomers Resources</Link>. Get familiar with the Layer5 community through our <Link to="/community/handbook">Community Handbook</Link>.
27+
</p>
28+
29+
<h3>Earn a Badge </h3>
30+
<p>Earn a Hacktoberfest Contributor badge by contributing to Layer5 projects during this Hacktoberfest.</p>
31+
<img src={hacktoberfestBadge} style="width: 250px"/>
32+
33+
<ul>
34+
<li><strong>DATE:</strong>October 3, 2025</li>
35+
<li><strong>TIME:</strong>9AM CT | 3PM WAT | 7:30PM IST</li>
36+
{/* <li><strong>LIVESTREAM:</strong> <a href="https://www.youtube.com/watch?v=iKe52yMWWK4">YouTube</a></li> */}
37+
</ul>
38+
39+
<p> Resources:</p>
40+
{/*
41+
<ul>
42+
<li><Link to="/blog/open-source/ways-to-contribute-at-layer5">Code and Non-Code Contributing at Layer5</Link></li>
43+
<li><a href="https://github.com/issues?q=is%3Aopen+is%3Aissue+archived%3Afalse+org%3Alayer5io+org%3Ameshery+org%3Aservice-mesh-performance+org%3Aservice-mesh-patterns+label%3A%22hacktoberfest%22+">Issues for Hacktoberfest</a></li>
44+
<li><a href="https://www.youtube.com/watch?v=iKe52yMWWK4">Recorded Livestream</a></li>
45+
<li><a href={preptemberslides}>Presentation Slides</a></li>
46+
</ul> */}
126 KB
Loading
-12.1 MB
Binary file not shown.

src/collections/members/gopi-vaibhav/index.mdx

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/components/Pricing/PricingAddons/index.js

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ export const PricingAddons = ({ isYearly = false, setIsYearly ,currency,enterpri
177177
const enterpriseUserSeats = enterpriseUsers > 0 ? ` and ${enterpriseUsers} enterprise user${enterpriseUsers > 1 ? "s" : ""}` : "";
178178
return {
179179
link: matchingPlanLink.link,
180-
name: `Subscribe (${currentLearnerCount} learners${targetSubAddonName ? " " + targetSubAddonName : ""}${enterpriseUserSeats})`
180+
name: "Subscribe For Add-on"
181181
};
182182
}
183183

@@ -191,7 +191,7 @@ export const PricingAddons = ({ isYearly = false, setIsYearly ,currency,enterpri
191191

192192
return {
193193
link: "#",
194-
name: `Subscribe to ${selectedAddon.name}`
194+
name: "Subscribe For Add-on"
195195
};
196196
};
197197

@@ -361,7 +361,7 @@ export const PricingAddons = ({ isYearly = false, setIsYearly ,currency,enterpri
361361
const option = targetSubAddon.pricing[value];
362362
const pricePerUser = isYearly ? option.yearlyPerUser : option.monthlyPerUser;
363363
const totalPrice = pricePerUser * option.learners;
364-
const period = isYearly ? "/month" : "/month";
364+
const period = isYearly ? "/year" : "/month";
365365
return `${option.learners} learners - ${formatPrice(totalPrice)}${period}`;
366366
}
367367
return "";
@@ -409,7 +409,7 @@ export const PricingAddons = ({ isYearly = false, setIsYearly ,currency,enterpri
409409
})()}
410410
/>
411411
<Box sx={boxStyles.disclaimerSection}>
412-
<Typography variant="body2" sx={typographyStyles.italic}>
412+
<Typography variant="body2" sx={typographyStyles.italic }>
413413
Looking for a plan larger than 2,500 learners? Great! <a href="/company/contact">Let us know</a>.
414414
</Typography>
415415
</Box>
@@ -420,39 +420,48 @@ export const PricingAddons = ({ isYearly = false, setIsYearly ,currency,enterpri
420420
{selectedAddon !== null && selectedAddon.id !== "academy" && (
421421
<>
422422
<Box sx={boxStyles.unitQuantitySection}>
423-
<Typography variant="h6" fontWeight="600" sx={boxStyles.unitQuantityTitle}>
423+
<Typography variant="h6" sx={boxStyles.unitQuantityTitle}>
424424
{selectedAddon.pricing?.[quantityIndex]?.units || 0} {selectedAddon?.unitLabel}
425425
</Typography>
426426
<Slider
427-
value={quantityIndex}
428-
onChange={(event, newValue) => setQuantityIndex(newValue)}
429-
min={0}
430-
max={selectedAddon?.pricing?.length - 1 || 0}
431-
step={null}
432-
valueLabelDisplay="auto"
433-
valueLabelFormat={(value) => {
434-
if (selectedAddon?.pricing && selectedAddon.pricing[value]) {
435-
const option = selectedAddon.pricing[value];
436-
const unitPrice = isYearly ? option.yearlyPerUnit : option.monthlyPerUnit;
437-
const totalPrice = unitPrice * option.units;
438-
const period = isYearly ? "/year" : "/month";
439-
return `${option.units} ${selectedAddon?.unitLabel?.slice(0, -1) || "unit"} - ${formatPrice(totalPrice)}${period}`;
440-
}
441-
return "";
442-
}}
443-
sx={getSliderStyle(sliderStyles.baseOther, "14px")}
444-
marks={selectedAddon?.pricing?.map((option, index) => ({
445-
value: index,
446-
label: (
447-
<Box sx={boxStyles.sliderMarks}>
448-
<Box>{option.units}</Box>
449-
<Box sx={boxStyles.sliderPriceText}>
450-
{formatPrice(isYearly ? option.yearlyPerUnit * option.units : option.monthlyPerUnit * option.units)}
427+
value={quantityIndex}
428+
onChange={(event, newValue) => setQuantityIndex(newValue)}
429+
min={0}
430+
valueLabelDisplay="auto"
431+
valueLabelFormat={(value) => {
432+
const option = selectedAddon?.pricing?.[value];
433+
if (option) {
434+
const pricePerUnit = isYearly ? option.yearlyPerUnit : option.monthlyPerUnit;
435+
const totalPrice = pricePerUnit * option.units;
436+
const period = isYearly ? "/year" : "/month";
437+
return `${option.units} ${selectedAddon.unitLabel?.slice(0, -1) || "unit"} - ${formatPrice(totalPrice)}${period}`;
438+
}
439+
return "";
440+
}}
441+
max={(selectedAddon?.pricing?.length - 1) || 0}
442+
step={null}
443+
sx={getSliderStyle(sliderStyles.baseOther, "1rem")} // ← use same style as academy
444+
marks={selectedAddon?.pricing?.map((option, index) => ({
445+
value: index,
446+
label: (
447+
<Box sx={{ textAlign: "center", fontSize: "1.25rem", fontWeight: "bold" }}>
448+
<Box>{option.units}</Box>
449+
<Box
450+
sx={{
451+
color: "text.secondary",
452+
mb: 1.5,
453+
fontSize: {
454+
xs: "0.75rem",
455+
sm: "0.9rem",
456+
}
457+
}}>
458+
{formatPrice(isYearly ? option.yearlyPerUnit : option.monthlyPerUnit)}<br />{selectedAddon.unitLabel?.slice(0, -1) || "unit"}/{isYearly ? "year" : "month"}
459+
</Box>
451460
</Box>
452-
</Box>
453-
),
454-
})) || []}
455-
/>
461+
)
462+
}))}
463+
/>
464+
456465
</Box>
457466
</>
458467
)}
@@ -468,7 +477,7 @@ export const PricingAddons = ({ isYearly = false, setIsYearly ,currency,enterpri
468477
>
469478
<Box sx={{ ...boxStyles.flexBetween, ...boxStyles.pricingHeader }}>
470479
<Typography variant="h6" sx={typographyStyles.subheading} gutterBottom>
471-
Add-on × Quantity per Subscription Duration
480+
Add-on × Quantity / per Subscription Duration
472481
</Typography>
473482
<Typography variant="h6" sx={typographyStyles.subheading} gutterBottom>
474483
SUBTOTAL
@@ -552,9 +561,7 @@ export const PricingAddons = ({ isYearly = false, setIsYearly ,currency,enterpri
552561
{formatPrice((isYearly ? enterprisePlan.yearlyprice : enterprisePlan.monthlyprice) * (enterpriseUsers > 0 ? enterpriseUsers : 1))}/{isYearly ? "monthly" : "yearly"}
553562
</Typography>
554563
</Box>
555-
<Typography variant="h6" sx={typographyStyles.subheading} gutterBottom>
556-
TOTAL
557-
</Typography>
564+
558565
<Box sx={boxStyles.flexBetween}>
559566
<Typography variant="body1" gutterBottom sx={typographyStyles.subheading}>
560567
{isYearly ? "Yearly" : "Monthly"} Cost

src/components/Pricing/PricingAddons/pricingData.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ export const getAddOns = () => [
7070
monthlyPrice: 64,
7171
yearlyPrice: 653, // ~15% discount for yearly
7272
iconType: "cloud", // Reference to icon type instead of component
73-
unitLabel: "servers",
74-
unitLabelSingular: "server",
73+
unitLabel: "Servers",
74+
unitLabelSingular: "Server",
7575
maxUnits: 50,
7676
pricing: [
7777
{ units: 1, monthlyPerUnit: 64, yearlyPerUnit: 54.40, currency: "$" },
@@ -87,8 +87,8 @@ export const getAddOns = () => [
8787
monthlyPrice: 1.50,
8888
yearlyPrice: 15.30, // ~15% discount for yearly
8989
iconType: "group", // Reference to icon type instead of component
90-
unitLabel: "collaborators",
91-
unitLabelSingular: "collaborator",
90+
unitLabel: "Collaborators",
91+
unitLabelSingular: "Collaborator",
9292
maxUnits: 200,
9393
pricing: [
9494
{ units: 1, monthlyPerUnit: 2, yearlyPerUnit: 1.70, currency: "$" },

src/components/Pricing/PricingAddons/styles.js

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ export const typographyStyles = {
2424
italic: {
2525
fontFamily: QANELAS_FONT,
2626
fontStyle: "italic",
27-
color: "text.secondary"
27+
color: "text.secondary",
28+
marginTop: 5
2829
},
2930
headerTitle: {
3031
fontSize: 16,
@@ -53,7 +54,9 @@ export const typographyStyles = {
5354
fontSize: "0.8rem",
5455
fontStyle: "italic",
5556
fontFamily: QANELAS_FONT,
56-
color: "text.secondary"
57+
color: "text.secondary",
58+
marginTop: 5,
59+
marginBottom: 5,
5760
},
5861
pricingItemLeft: {
5962
marginLeft: 0.5,
@@ -192,8 +195,10 @@ export const boxStyles = {
192195
justifyContent: "center"
193196
},
194197
unitQuantityTitle: {
195-
fontSize: "1rem",
196-
mb: 1
198+
justifySelf: "center",
199+
textAlign: "center",
200+
width: "100%",
201+
fontFamily: QANELAS_FONT
197202
},
198203
pricingPaper: {
199204
p: 2.5,
@@ -217,7 +222,7 @@ export const boxStyles = {
217222
alignItems: "center"
218223
},
219224
enterpriseUserInput: {
220-
width: "5rem",
225+
width: "4rem",
221226
ml: 1,
222227
"& .MuiInputBase-input": {
223228
py: "0.25rem"
@@ -284,8 +289,8 @@ export const sliderStyles = {
284289
justifyContent: "center"
285290
},
286291
baseOther: {
287-
mb: 4,
288-
ml: 6,
292+
mb: 6,
293+
ml: 7,
289294
width: "80%",
290295
display: "flex",
291296
justifyContent: "center"

0 commit comments

Comments
 (0)