Skip to content
Merged
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
52 changes: 52 additions & 0 deletions website/src/components/Contribute.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@
* =========================LICENSE_END==================================
*/

import { SlackIcon } from './icons'

/** LF Edge Slack — workspace invite is open to anyone; the channel link needs workspace membership. */
const SLACK_CHANNEL_URL = 'https://lfedge.slack.com/archives/C077JQ50R45'
const SLACK_INVITE_URL = 'https://slack.lfedge.org/'
const MAILING_LIST_URL = 'https://lists.lfedge.org/g/instantx-TSC'

const CARDS = [
{
href: 'https://github.com/lf-edge/instantx/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22',
Expand Down Expand Up @@ -79,6 +86,51 @@ function Contribute() {
))}
</div>

<div className="slack-panel">
<span className="sp-icon">
<SlackIcon />
</span>
<div>
<h3>InstantX on the LF Edge Slack</h3>
<p>
Day-to-day project chat lives in the InstantX channel of the LF Edge Slack workspace — design
questions, integration help, release coordination and community calls. Maintainers and adopters
read it, so it is the quickest way to reach someone.
</p>
<dl className="sp-meta">
<div>
<dt>Workspace</dt>
<dd>lfedge.slack.com</dd>
</div>
<div>
<dt>Channel</dt>
<dd>
<a href={SLACK_CHANNEL_URL} target="_blank" rel="noopener">
InstantX project channel ↗
</a>
</dd>
</div>
<div>
<dt>Mailing list</dt>
<dd>
<a href={MAILING_LIST_URL} target="_blank" rel="noopener">
instantx-TSC ↗
</a>
</dd>
</div>
</dl>
</div>
<div className="sp-actions">
<a className="btn btn-primary" href={SLACK_CHANNEL_URL} target="_blank" rel="noopener">
<SlackIcon />
Open the channel
</a>
<a className="btn btn-ghost" href={SLACK_INVITE_URL} target="_blank" rel="noopener">
Get a Slack invite
</a>
</div>
</div>

<div className="flow" aria-label="Contribution workflow">
<span className="flabel">PR flow</span>
{FLOW_STEPS.map((step, i) => (
Expand Down
2 changes: 2 additions & 0 deletions website/src/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ function Footer() {
<div className="fcol">
<h4>Community</h4>
<a href="https://github.com/lf-edge/instantx/discussions" target="_blank" rel="noopener">Discussions</a>
<a href="https://lfedge.slack.com/archives/C077JQ50R45" target="_blank" rel="noopener">Slack channel</a>
<a href="https://lists.lfedge.org/g/instantx-TSC" target="_blank" rel="noopener">Mailing list · instantx-TSC</a>
<a href="https://github.com/lf-edge/instantx/blob/main/CONTRIBUTING.md" target="_blank" rel="noopener">Contributing</a>
<a href="https://github.com/lf-edge/instantx/blob/main/CODE_OF_CONDUCT.md" target="_blank" rel="noopener">Code of conduct</a>
<a href="https://github.com/lf-edge/instantx/blob/main/LICENSE.md" target="_blank" rel="noopener">License · MIT + Apache-2.0</a>
Expand Down
11 changes: 11 additions & 0 deletions website/src/components/icons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,17 @@ export function GitHubIcon() {
)
}

export function SlackIcon() {
return (
<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
<path d="M9.5 14.5a2 2 0 0 1-2 2 2 2 0 0 1-2-2 2 2 0 0 1 2-2h2v2Zm1 0a2 2 0 0 1 2-2 2 2 0 0 1 2 2v5a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-5Z" />
<path d="M12.5 6.5a2 2 0 0 1-2-2 2 2 0 0 1 2-2 2 2 0 0 1 2 2v2h-2Zm0 1a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-5a2 2 0 0 1-2-2 2 2 0 0 1 2-2h5Z" />
<path d="M17.5 9.5a2 2 0 0 1 2-2 2 2 0 0 1 2 2 2 2 0 0 1-2 2h-2v-2Zm-1 0a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2 2 2 0 0 1 2 2v5Z" />
<path d="M14.5 17.5a2 2 0 0 1 2 2 2 2 0 0 1-2 2 2 2 0 0 1-2-2v-2h2Zm0-1a2 2 0 0 1-2-2 2 2 0 0 1 2-2h5a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-5Z" />
</svg>
)
}

export function ArrowRightIcon({ className }: { className?: string }) {
return (
<svg
Expand Down
28 changes: 28 additions & 0 deletions website/src/styles/global.css
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,30 @@ a.ccard:hover h3 .arrow{ transform:translate(3px,-3px); color:var(--accent); }
.ccard p{ color:var(--muted); font-size:14.5px; }
.ccard .pill{ align-self:flex-start; font-family:var(--mono); font-size:11px; letter-spacing:0.06em; color:var(--ok); border:1px solid color-mix(in oklch,var(--ok) 35%,transparent); background:color-mix(in oklch,var(--ok) 12%,transparent); border-radius:999px; padding:3px 10px; text-transform:uppercase; }

/* ---- LF Edge Slack panel ---- */
.slack-panel{
margin-top:20px; display:grid; grid-template-columns:auto 1fr auto;
gap:clamp(16px,3vw,28px); align-items:center;
background:linear-gradient(180deg, var(--accent-soft), transparent), var(--surface);
border:1px solid color-mix(in oklch, var(--accent) 30%, var(--border));
border-radius:var(--r); padding:22px clamp(18px,3vw,30px);
}
.slack-panel .sp-icon{
width:52px; height:52px; border-radius:12px; display:grid; place-items:center;
background:var(--accent-soft); color:var(--accent);
border:1px solid color-mix(in oklch, var(--accent) 30%, transparent);
}
.slack-panel .sp-icon svg{ width:26px; height:26px; }
.slack-panel h3{ font-size:18px; font-weight:640; }
.slack-panel p{ color:var(--muted); font-size:14.5px; margin-top:6px; max-width:62ch; }
.sp-meta{ display:flex; flex-wrap:wrap; gap:8px 22px; margin:12px 0 0; }
.sp-meta div{ display:flex; align-items:baseline; gap:8px; }
.sp-meta dt{ font-family:var(--mono); font-size:11px; letter-spacing:0.12em; text-transform:uppercase; color:var(--faint); }
.sp-meta dd{ margin:0; font-family:var(--mono); font-size:13px; color:var(--fg); }
.sp-meta dd a{ color:var(--accent); border-bottom:1px solid color-mix(in oklch, var(--accent) 40%, transparent); }
.sp-meta dd a:hover{ border-bottom-color:var(--accent); }
.slack-panel .sp-actions{ display:flex; flex-direction:column; gap:9px; }

.flow{
margin-top:20px; background:var(--surface); border:1px solid var(--border); border-radius:var(--r);
padding:22px clamp(18px,3vw,30px); display:flex; align-items:center; flex-wrap:wrap; gap:10px;
Expand Down Expand Up @@ -387,6 +411,8 @@ a.ccard:hover h3 .arrow{ transform:translate(3px,-3px); color:var(--accent); }
.feat, .feat.lead-card{ grid-column:span 2; }
.qs-grid{ grid-template-columns:1fr; }
.contrib-grid{ grid-template-columns:repeat(2,1fr); }
.slack-panel{ grid-template-columns:auto 1fr; }
.slack-panel .sp-actions{ grid-column:1 / -1; flex-direction:row; flex-wrap:wrap; }
.footer-top{ grid-template-columns:1fr 1fr; gap:28px; }
}
@media (max-width: 720px){
Expand All @@ -405,6 +431,8 @@ a.ccard:hover h3 .arrow{ transform:translate(3px,-3px); color:var(--accent); }
.feat-grid{ grid-template-columns:1fr; }
.feat, .feat.lead-card{ grid-column:span 1; }
.contrib-grid{ grid-template-columns:1fr; }
.slack-panel{ grid-template-columns:1fr; }
.slack-panel .sp-actions .btn{ width:100%; }
.footer-top{ grid-template-columns:1fr 1fr; }
body{ font-size:16px; }
}
Expand Down
Loading