Skip to content

Commit 4c6c8fd

Browse files
committed
[green] Publish the public GitHub repository
Signed-off-by: Viwat Vchirawongkwin <viwat.v@chula.ac.th> (cherry picked from commit 82c73e35215477e0218f78ef78bbe707c3fbc372)
1 parent 4820d03 commit 4c6c8fd

4 files changed

Lines changed: 212 additions & 0 deletions

File tree

‎tools/web/src/app/globals.css‎

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,6 +1078,122 @@ h3 {
10781078
color: var(--warning);
10791079
}
10801080

1081+
.source-section {
1082+
border-bottom: 1px solid var(--line);
1083+
background: #edf3fc;
1084+
}
1085+
1086+
.source-section__card {
1087+
display: grid;
1088+
padding: clamp(34px, 5vw, 58px);
1089+
align-items: center;
1090+
grid-template-columns: minmax(0, 1fr) minmax(310px, 0.72fr);
1091+
gap: clamp(42px, 7vw, 86px);
1092+
border: 1px solid #cedceb;
1093+
border-radius: var(--radius-lg);
1094+
background:
1095+
linear-gradient(115deg, rgb(45 91 255 / 6%), transparent 48%), var(--white);
1096+
box-shadow: var(--shadow-sm);
1097+
}
1098+
1099+
.source-section__copy {
1100+
max-width: 650px;
1101+
}
1102+
1103+
.source-section__card h2 {
1104+
margin-bottom: 17px;
1105+
font-size: clamp(1.9rem, 3vw, 3rem);
1106+
}
1107+
1108+
.source-section__lede {
1109+
margin: 0;
1110+
color: var(--muted);
1111+
}
1112+
1113+
.source-section__action {
1114+
margin-top: 27px;
1115+
}
1116+
1117+
.source-repository {
1118+
overflow: hidden;
1119+
padding: 24px;
1120+
border: 1px solid rgb(144 182 227 / 18%);
1121+
border-radius: var(--radius-md);
1122+
background:
1123+
radial-gradient(circle at 88% 4%, rgb(47 140 255 / 18%), transparent 34%),
1124+
var(--navy-950);
1125+
box-shadow: var(--shadow-md);
1126+
color: #b9c9dc;
1127+
}
1128+
1129+
.source-repository__heading {
1130+
display: flex;
1131+
padding-bottom: 20px;
1132+
align-items: center;
1133+
gap: 13px;
1134+
border-bottom: 1px solid var(--line-dark);
1135+
}
1136+
1137+
.source-repository__icon {
1138+
display: grid;
1139+
width: 42px;
1140+
height: 42px;
1141+
flex: 0 0 auto;
1142+
place-items: center;
1143+
border: 1px solid rgb(124 215 255 / 22%);
1144+
border-radius: 12px;
1145+
background: rgb(47 140 255 / 12%);
1146+
color: var(--cyan-300);
1147+
}
1148+
1149+
.source-repository__icon svg {
1150+
width: 21px;
1151+
}
1152+
1153+
.source-repository__heading p {
1154+
display: grid;
1155+
margin: 0;
1156+
line-height: 1.4;
1157+
}
1158+
1159+
.source-repository__heading strong {
1160+
color: var(--white);
1161+
font-size: 0.93rem;
1162+
}
1163+
1164+
.source-repository__heading small {
1165+
color: #8297b1;
1166+
font-size: 0.7rem;
1167+
}
1168+
1169+
.source-repository ul {
1170+
display: grid;
1171+
margin: 0;
1172+
padding: 20px 0 0;
1173+
gap: 13px;
1174+
list-style: none;
1175+
}
1176+
1177+
.source-repository li {
1178+
display: grid;
1179+
min-width: 0;
1180+
align-items: baseline;
1181+
grid-template-columns: minmax(92px, auto) 1fr;
1182+
gap: 12px;
1183+
font-size: 0.76rem;
1184+
}
1185+
1186+
.source-repository code {
1187+
color: var(--cyan-300);
1188+
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
1189+
font-size: 0.75rem;
1190+
font-weight: 700;
1191+
}
1192+
1193+
.source-repository li span {
1194+
color: #94a7be;
1195+
}
1196+
10811197
.beta-invite {
10821198
background: var(--white);
10831199
}
@@ -1949,6 +2065,15 @@ h3 {
19492065
gap: 44px;
19502066
}
19512067

2068+
.source-section__card {
2069+
align-items: stretch;
2070+
grid-template-columns: 1fr;
2071+
}
2072+
2073+
.source-repository {
2074+
max-width: 560px;
2075+
}
2076+
19522077
.policy-contact,
19532078
.report-card {
19542079
position: static;
@@ -2088,6 +2213,24 @@ h3 {
20882213
min-height: 150px;
20892214
}
20902215

2216+
.source-section__card {
2217+
padding: 30px 24px;
2218+
gap: 38px;
2219+
}
2220+
2221+
.source-section__action {
2222+
width: 100%;
2223+
}
2224+
2225+
.source-repository {
2226+
padding: 20px;
2227+
}
2228+
2229+
.source-repository li {
2230+
grid-template-columns: 1fr;
2231+
gap: 1px;
2232+
}
2233+
20912234
.beta-invite__card {
20922235
align-items: stretch;
20932236
grid-template-columns: 1fr;

‎tools/web/src/app/page.tsx‎

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
CheckIcon,
1414
CodeIcon,
1515
ConsoleIcon,
16+
ExternalIcon,
1617
ProtocolIcon,
1718
RadioIcon,
1819
ShieldIcon,
@@ -268,6 +269,66 @@ export default function HomePage() {
268269
</div>
269270
</section>
270271

272+
<section
273+
className="section source-section"
274+
aria-labelledby="source-section-title"
275+
>
276+
<div className="container source-section__card">
277+
<div className="source-section__copy">
278+
<p className="eyebrow">Free and open source</p>
279+
<h2 id="source-section-title">See how PyBLE is built.</h2>
280+
<p className="source-section__lede">
281+
The tablet app, board-agent firmware, PBLE/1 protocol, tests, and
282+
documentation are developed in public under the MIT license.
283+
Explore how the pieces fit together, build from source, or help
284+
bring PyBLE to another MicroPython + BLE board.
285+
</p>
286+
<a
287+
className="button button--primary source-section__action"
288+
href={siteConfig.repositoryUrl}
289+
target="_blank"
290+
rel="noopener noreferrer"
291+
>
292+
Explore PyBLE on GitHub
293+
<ExternalIcon />
294+
</a>
295+
</div>
296+
297+
<aside
298+
className="source-repository"
299+
aria-label="Inside the PyBLE repository"
300+
>
301+
<div className="source-repository__heading">
302+
<span className="source-repository__icon" aria-hidden="true">
303+
<CodeIcon />
304+
</span>
305+
<p>
306+
<strong>PyBLE-dev / PyBLE</strong>
307+
<small>Public repository · MIT license</small>
308+
</p>
309+
</div>
310+
<ul>
311+
<li>
312+
<code>app/</code>
313+
<span>Flutter tablet IDE</span>
314+
</li>
315+
<li>
316+
<code>firmware/</code>
317+
<span>MicroPython + BLE agent</span>
318+
</li>
319+
<li>
320+
<code>docs/</code>
321+
<span>PBLE/1 and public specifications</span>
322+
</li>
323+
<li>
324+
<code>tests/</code>
325+
<span>Conformance and release gates</span>
326+
</li>
327+
</ul>
328+
</aside>
329+
</div>
330+
</section>
331+
271332
<section
272333
className="section beta-invite"
273334
id="testflight"

‎tools/web/src/components/site-footer.tsx‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ export function SiteFooter() {
1616
</div>
1717

1818
<nav className="site-footer__links" aria-label="Footer">
19+
<a
20+
href={siteConfig.repositoryUrl}
21+
target="_blank"
22+
rel="noopener noreferrer"
23+
>
24+
GitHub
25+
</a>
1926
<Link href="/flash">Firmware</Link>
2027
<Link href="/support">Support</Link>
2128
<Link href="/privacy">Privacy</Link>

‎tools/web/src/lib/site.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export const siteConfig = {
1212
"A free, open-source, tablet-first IDE for MicroPython boards with compatible Bluetooth Low Energy agent firmware.",
1313
supportEmail: "viwat.v@chula.ac.th",
1414
testFlightUrl: "https://testflight.apple.com/join/yU4e8s6d",
15+
repositoryUrl: "https://github.com/PyBLE-dev/PyBLE",
1516
} as const;
1617

1718
export const navigation = [

0 commit comments

Comments
 (0)