hackathon-deck-vote

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

The vote presentation: the elevator pitch, filled, hosted, linked

投票演示文稿:补全、托管并关联链接的电梯演讲稿

The other participants read it alone, on their phone or their laptop, in about a minute: the hackathon app's Vote page shows it framed above the ballot. Every team fills the same sentence, so the teams compare on the same grounds:
For who who need, Product is category that benefit. Today, alternative. With Product, difference.
Six screens: the cover, who it is for, what it is (beside a screenshot), what changes, the moment that proves it (beside a screenshot), the whole sentence with the team. It is not the pitch (the stage, the
hackathon-deck-pitch
skill) and not the demo (the jury's episodes, the
hackathon-deck-demo
skill).
Work from the root of the team's clone; everything goes into
decks/vote/
. The scripts ship with this skill, in the
scripts/
folder beside this SKILL.md (call that folder
$SKILL_DIR/scripts
; under Claude Code it is also
${CLAUDE_PLUGIN_ROOT}/skills/hackathon-deck-vote/scripts
, and after
npx skills add
it is
~/.agents/skills/hackathon-deck-vote/scripts
):
fill.mjs
fills the deck,
check.mjs
checks it, and
vote.example.json
shows the content filled for an invented tool.
其他参与者会独自用手机或笔记本电脑阅读约一分钟:Hackathon 应用的 Vote 页面会在投票表单上方以嵌入框架的形式展示它。每个团队都填写同一句式,因此各团队是在相同维度上进行比较:
对于需要 need 的 who,Product 是一款能够带来 benefit 的 category。 如今,alternative。使用 Product 后,difference。
六个画面:封面、目标用户、产品是什么(配一张截图)、会带来什么改变、证明产品价值的关键时刻(配一张截图),以及包含团队名称的完整句子。它不是 pitch(舞台演讲,对应
hackathon-deck-pitch
skill),也不是 demo(评委演示环节,对应
hackathon-deck-demo
skill)。
从团队 clone 的根目录开始工作;所有内容都放入
decks/vote/
。这些脚本随本 skill 一同提供,位于本 SKILL.md 旁边的
scripts/
目录(将该目录称为
$SKILL_DIR/scripts
;在 Claude Code 下,它也位于
${CLAUDE_PLUGIN_ROOT}/skills/hackathon-deck-vote/scripts
,执行
npx skills add
后,则位于
~/.agents/skills/hackathon-deck-vote/scripts
):
fill.mjs
用于填充演示文稿,
check.mjs
用于检查,
vote.example.json
展示了一个虚构工具对应的填充后内容。

1. Slideless, in the event's workspace

1. 在活动的 workspace 中使用 Slideless

bash
npm i -g @antasphere/slideless@latest
slideless whoami --json
The participant's
hackathon login
is the same Antasphere login. It asks to sign in, or says "Run
antasphere login
": the participant runs
hackathon login
in their own terminal, then again. A refusal that the organization has no access to Slideless: STOP and tell the participant an organizer has to open Slideless to the event's organization; nothing can be published before.
workspace.name
in
hackathon whoami --json
is the event's organization; take the workspace with the same name in
slideless workspaces --json
and pass
--workspace <its id>
to every
slideless
command below. When none has that name, say so and ASK; never publish in a personal workspace.
bash
npm i -g @antasphere/slideless@latest
slideless whoami --json
参与者使用
hackathon login
登录的就是同一个 Antasphere 账号。它会要求完成登录,或提示“Run
antasphere login
”:参与者先在自己的终端中运行
hackathon login
,然后再次运行该命令。如果系统因该组织没有 Slideless 访问权限而拒绝操作:立即停止,并告知参与者必须由组织者为活动所属组织开通 Slideless;在此之前无法发布任何内容。
hackathon whoami --json
中的
workspace.name
是活动所属组织的名称;在
slideless workspaces --json
中找到同名 workspace,并向下面每条
slideless
命令传入
--workspace <its id>
。如果没有同名 workspace,应说明情况并询问;绝不能发布到个人 workspace。

2. Start from the organizer's template

2. 从组织方的模板开始

bash
slideless template list --json --workspace <id>
Take the template titled
Vote presentation
. When there is none, STOP: tell the participant the organizers have not published the event's templates yet (their
event-decks
guide does it) and to ask one of them. Never build the deck any other way. Then, once:
bash
slideless template start "Vote presentation" decks/vote/deck --workspace <id>
printf 'decks/*/deck/\ndecks/*/check/\n' >> .gitignore    # once per clone, if not there yet
decks/vote/deck/
carries the Antasphere brand's typefaces, whose licence forbids a public repository: it is never committed. The team's source is
decks/vote/vote.json
and the screenshots. When
decks/vote/deck/
already exists, keep it: its
.slideless.json
is the link to the published deck, so the next push is a new version of the same deck and the share link keeps working.
bash
slideless template list --json --workspace <id>
选择标题为
Vote presentation
的模板。如果没有模板,立即停止:告知参与者组织方尚未发布该活动的模板(组织方的
event-decks
指南会指导他们完成此操作),并请其联系其中一位组织者。绝不能以其他方式构建演示文稿。随后只需执行一次:
bash
slideless template start "Vote presentation" decks/vote/deck --workspace <id>
printf 'decks/*/deck/\ndecks/*/check/\n' >> .gitignore    # once per clone, if not there yet
decks/vote/deck/
包含 Antasphere 品牌字体,其许可不允许放入公开 repository,因此绝不提交该目录。团队维护的源文件是
decks/vote/vote.json
和相关截图。如果
decks/vote/deck/
已经存在,应予以保留:其中的
.slideless.json
保存着已发布演示文稿的链接,因此下一次 push 会发布同一份演示文稿的新版本,而分享链接会继续有效。

3. Gather, then ASK

3. 收集信息,然后询问(ASK)

Read the repository (the README, the routes, the dashboard's pages). When the
hackathon-deck-demo
skill ran, use its screenshots in
decks/demo/screens/
: one for what it is, one for the moment that proves it. Without them, take two screenshots of the running app (the
hackathon-deck-demo
skill's
play.mjs
does it).
Then ASK the participant, in ONE message, to confirm each gap, proposed from what you read, and read the whole sentence aloud to them:
  1. the product's name (24 characters at most) and its one sentence;
  2. who: one kind of person; need: what goes wrong for them today;
  3. category: what kind of thing it is, with its article ("a browser agent"); benefit: what it does for them;
  4. alternative: what they do today without it; difference: what changes with it;
  5. the moment to see, one sentence, and its screenshot;
  6. the members' names, and a demo link anyone can open (
    https://
    ), or none.
阅读代码仓库(README、路由和 dashboard 页面)。如果
hackathon-deck-demo
skill 已经运行,则使用其在
decks/demo/screens/
中生成的截图:一张用于说明产品是什么,另一张用于展示证明产品价值的关键时刻。如果没有这些截图,则截取运行中应用的两张截图(
hackathon-deck-demo
skill 的
play.mjs
可以完成此操作)。
然后在一条消息中向参与者询问(ASK),依据已读取的信息拟定每个空缺项的内容,并向参与者完整朗读整个句子:
  1. 产品名称(最多 24 个字符)及其一句话简介;
  2. who:一类用户;need:他们目前会遇到什么问题;
  3. category:产品属于哪一类,并带上相应的冠词(例如
    a browser agent
    );benefit:它能为用户带来什么;
  4. alternative:目前没有它时,用户会采用什么替代方案;difference:使用它后会发生什么变化;
  5. 要展示的关键时刻,用一句话描述,并提供相应截图;
  6. 成员姓名,以及任何人都能打开的 demo 链接(以
    https://
    开头);如果没有,则注明没有。

4. Fill and check

4. 填充并检查

Write
decks/vote/vote.json
in the shape of
vote.example.json
:
lang
(
en
,
fr
or
nl
),
occasion
(the event's name and date, from
hackathon event status --json
: its name and its start day, as
<name> · <day month year>
),
team
,
product
,
oneLiner
,
pitch
(
who
,
need
,
category
,
benefit
,
alternative
,
difference
),
does.image
,
moment
(
image
,
text
),
members
,
demoUrl
. Image paths are relative to
decks/vote/
. Each gap must flow from the fixed word before it (French:
qui
; Dutch:
die
).
bash
node "$SKILL_DIR/scripts/fill.mjs" vote decks/vote
node "$SKILL_DIR/scripts/check.mjs" decks/vote
fill.mjs
exit 2, one line per problem (an empty gap, a text too long, a missing image, a link that is not https): fix
vote.json
, run it again.
check.mjs
needs Playwright once per machine (exit 4 says how:
npm i --prefix ~/.cache/antasphere-hackathon/playwright playwright@1
, then
npx --prefix ~/.cache/antasphere-hackathon/playwright playwright install chromium
). It walks the six slides on a laptop and the six screens on a phone, writes
decks/vote/check/laptop-N.png
and
phone-N.png
, and prints
ok
. Exit 1, one line per problem: a text that runs out of its slide, a phone screen that scrolls, a request outside the deck, an image that did not load, a deck over 5 MB. Shorten in
vote.json
, fill, check again.
Open the screenshots with the participant (
open decks/vote/check
on macOS,
start
on Windows,
xdg-open
on Linux). A screen that says what the app does not do is rewritten, never kept.
按照
vote.example.json
的结构编写
decks/vote/vote.json
:
lang
(
en
、
fr
或
nl
)、
occasion
(活动的名称和日期,从
hackathon event status --json
获取其名称和开始日期,格式为
<name> · <day month year>
)、
team
、
product
、
oneLiner
、
pitch
(
who
、
need
、
category
、
benefit
、
alternative
、
difference
)、
does.image
、
moment
(
image
、
text
)、
members
、
demoUrl
。图片路径相对于
decks/vote/
。每个空缺项都必须与前一个固定词自然衔接(法语:
qui
;荷兰语:
die
)。
bash
node "$SKILL_DIR/scripts/fill.mjs" vote decks/vote
node "$SKILL_DIR/scripts/check.mjs" decks/vote
如果
fill.mjs
返回退出码 2,每行会列出一个问题(空缺项、文本过长、图片缺失、链接不是 https):修复
vote.json
后再次运行。
每台机器只需为
check.mjs
安装一次 Playwright(退出码 4 会说明安装方法:先执行
npm i --prefix ~/.cache/antasphere-hackathon/playwright playwright@1
,再执行
npx --prefix ~/.cache/antasphere-hackathon/playwright playwright install chromium
)。它会遍历笔记本电脑界面中的六张幻灯片和手机界面中的六个屏幕,将结果写入
decks/vote/check/laptop-N.png
和
phone-N.png
,然后打印
ok
。如果返回退出码 1,每行会列出一个问题:文本超出幻灯片范围、手机画面出现滚动、对演示文稿外部发出请求、图片未加载,或演示文稿超过 5 MB。在
vote.json
中缩短文本,然后重新填充并检查。
与参与者一起打开这些截图进行检查(macOS 上执行
open decks/vote/check
,Windows 上执行
start
,Linux 上执行
xdg-open
)。任何说明应用不会做什么的画面都必须重写,绝不能保留。

5. Publish and share

5. 发布并分享

bash
slideless push decks/vote/deck --title "<Team> · Vote" --template "Vote presentation" --no-open --json --workspace <id>
Read
presentation.id
. Then one link for the Vote page, with no expiry and no password (a password link cannot be framed, and an expiry empties the Vote page):
bash
slideless share <deck id> --name "Community vote" --json --workspace <id>
Read
url
:
https://<host>/v/<token>/
, shown once. A refusal about credits: an organizer tops the organization up; say so and stop.
bash
slideless push decks/vote/deck --title "<Team> · Vote" --template "Vote presentation" --no-open --json --workspace <id>
读取
presentation.id
。然后为 Vote 页面生成一个链接,不设置有效期,也不设置密码(带密码的链接无法嵌入框架,而带有效期的链接会导致 Vote 页面内容变空):
bash
slideless share <deck id> --name "Community vote" --json --workspace <id>
读取
url
:
https://<host>/v/<token>/
,该链接只会显示一次。如果系统因 credits 问题拒绝操作:组织者需要为该组织充值;将情况告知参与者并停止。

6. Hand the link to the platform

6. 将链接交给平台

bash
hackathon decks link --vote <url> --json
hackathon showcase set --product "<product>" --tagline "<oneLiner>" --json
hackathon decks show --json
The team is the signed-in participant's own. Exit 2: not a share link
https://<host>/v/<token>/
, or a product name over 24 characters. Exit 1 with the platform's sentence: the link's host is not one the Vote page can show (the sentence names the allowed host: publish on that Slideless), or voting has opened and the vote presentation is fixed (an organizer can still replace it). Exit 3: sign in, or not on a team. An older
hackathon
CLI without
--vote
or
--product
:
npm i -g @antasphere/hackathon@latest
.
Commit
decks/vote/vote.json
and the screenshots it names, never
decks/vote/deck/
or
decks/vote/check/
. Push before the freeze like any other work.
bash
hackathon decks link --vote <url> --json
hackathon showcase set --product "<product>" --tagline "<oneLiner>" --json
hackathon decks show --json
目标团队是当前登录参与者自己的团队。如果返回退出码 2:提供的不是
https://<host>/v/<token>/
格式的分享链接,或产品名称超过 24 个字符。如果返回退出码 1,平台会给出相应说明:链接的 host 不在 Vote 页面允许显示的范围内(平台说明会列出允许的 host:应在对应的 Slideless 上发布),或者投票已经开始且投票演示文稿已被锁定(组织方仍然可以替换它)。如果返回退出码 3:尚未登录,或当前用户不属于任何团队。较旧版本的
hackathon
CLI 不支持
--vote
或
--product
:执行
npm i -g @antasphere/hackathon@latest
。
提交
decks/vote/vote.json
和其中引用的截图,绝不提交
decks/vote/deck/
或
decks/vote/check/
。与其他工作一样,在冻结前完成 push。

Never

绝不

  • Never build the deck without the organizer's template, and never copy the brand's files elsewhere.
  • Never put a credential, a password or a real person's data in a screenshot or a screen.
  • Never share the link with a password or an expiry.
  • Never describe a feature the app does not have.
  • Never pass a credential to
    slideless
    or
    hackathon
    : the Antasphere login does the work.
  • 绝不在没有组织方模板的情况下构建演示文稿,也绝不将品牌文件复制到其他位置。
  • 绝不在截图或屏幕画面中放入 credential、password 或真实人员数据。
  • 绝不使用带密码或有效期的分享链接。
  • 绝不描述应用并不具备的功能。
  • 绝不向
    slideless
    或
    hackathon
    传递 credential;认证工作由 Antasphere 登录完成。