|
23 | 23 | [key: string]: T; |
24 | 24 | } |
25 | 25 |
|
26 | | - const checklist = $state<Dynamic<boolean>>({ |
27 | | - "first item": false, |
28 | | - "second item": false, |
29 | | - "third item": false, |
| 26 | + let checklist = $state<Dynamic<boolean>>({ |
| 27 | + "You have an experienceable link (a URL where anyone can try your project now)": false, |
| 28 | + "You have a public GitHub URL with all source code": false, |
| 29 | + "You have a screenshot of your project": false, |
30 | 30 | }) |
31 | 31 |
|
| 32 | + switch (project?.projectType) { |
| 33 | + case "personal_website": |
| 34 | + case "website": |
| 35 | + checklist = { |
| 36 | + ...checklist, |
| 37 | + "Your project is deployed on the web (Vercel, Netlify, GitHub Pages, Fly.io, etc.)": false, |
| 38 | + "Your experienceable link loads without errors": false, |
| 39 | + "Core features of your website work; there are no placeholders": false, |
| 40 | + "Your repo includes simple build/deploy instructions": false, |
| 41 | + } |
| 42 | + break; |
| 43 | + case "platformer_game": |
| 44 | + case "game": |
| 45 | + checklist = { |
| 46 | + ...checklist, |
| 47 | + "Your game is published on itch.io with a public page": false, |
| 48 | + "Your game page includes a playable version (WebGL or downloadable build)": false, |
| 49 | + "Your game runs without crashing on startup": false, |
| 50 | + "There is a description and screenshot on your project's itch.io page": false, |
| 51 | + } |
| 52 | + break; |
| 53 | + case 'terminal_cli': |
| 54 | + checklist = { |
| 55 | + ...checklist, |
| 56 | + "Your CLI is installable in one simple command (brew, pip, cargo, or install script)": false, |
| 57 | + "Running the CLI immediately performs the main behavior": false, |
| 58 | + "Clear install instructions in README": false, |
| 59 | + "Example usage shown in README": false |
| 60 | + } |
| 61 | + break; |
| 62 | + case 'desktop_app': |
| 63 | + checklist = { |
| 64 | + ...checklist, |
| 65 | + "(Windows) Downloadable .exe file that successfully launches\n(macOS) Downloadable .dmg or .pkg file that opens/installs\n(Linux) AppImage or package (.deb/.rpm) that launches": false, |
| 66 | + "Clear download link provided": false, |
| 67 | + "Basic instructions for running the app included": false |
| 68 | + } |
| 69 | + break; |
| 70 | + case 'mobile_app': |
| 71 | + checklist = { |
| 72 | + ...checklist, |
| 73 | + "(iOS) Your app is Published on TestFlight with a public invitation link\n(Android) Downloadable .apk file or published on Google Play": false, |
| 74 | + "App opens and core functionality runs without immediate crash": false, |
| 75 | + "Instructions included if any special permissions are required": false, |
| 76 | + } |
| 77 | + break; |
| 78 | + } |
| 79 | +
|
32 | 80 | const copy = { |
33 | 81 | "personal_website": { |
34 | 82 | typeDesc: "A personal website should be your own original site where people can get to know you", |
35 | | - playableDesc: "This should be hosted and publicly accesible link to your website", |
| 83 | + playableDesc: "This should be a publicly accesible link to your website.", |
36 | 84 | }, |
37 | 85 | "platformer_game": { |
38 | | - typeDesc: |
39 | | - "A platformer game", |
40 | | - playableDesc: "For a game, this should be an itch.io link" |
| 86 | + typeDesc: "A platformer game", |
| 87 | + playableDesc: "This should be an link to your game on itch.io." |
41 | 88 | }, |
42 | 89 | "website": { |
43 | 90 | typeDesc: "A website should be a ", |
44 | | - playableDesc: "This should be hosted and publicly accesible link to your website", |
| 91 | + playableDesc: "This should be a publicly accesible link to your website.", |
45 | 92 | }, |
46 | 93 | "game": { |
47 | 94 | typeDesc: |
48 | 95 | "A game should be a game that can be played on a computer or mobile device", |
49 | | - playableDesc: |
50 | | - "This should be an itch.io link" |
| 96 | + playableDesc: "This should be a publicly accesible link to your website.", |
51 | 97 | }, |
52 | 98 | "terminal_cli": { |
53 | 99 | typeDesc: |
54 | 100 | "A terminal cli should be an installable executable that can be run from and output to a terminal in a Windows, Mac, or Linux computer", |
55 | 101 | playableDesc: |
56 | | - "This should be a link to the package's homebrew formulae" |
| 102 | + "This should be a link to the package on github releases, homebrew formulae, or other equivalent." |
57 | 103 | }, |
58 | 104 | "desktop_app": { |
59 | 105 | typeDesc: |
60 | 106 | "A desktop app should be a GUI application that can be installed and opened on a windows, mac, or linux computer", |
61 | 107 | playableDesc: |
62 | | - "This should be a link to the package's github release" |
| 108 | + "This should be a link to the app's github release." |
63 | 109 | }, |
64 | 110 | "mobile_app": { |
65 | 111 | typeDesc: |
66 | 112 | "A mobile app should be a application that can be run on a ios or android device", |
67 | 113 | playableDesc: |
68 | | - "This should be a link to the package's github release or a testflight link" |
| 114 | + "This should be a link to the app's github release or a testflight link (iOS)." |
69 | 115 | }, |
70 | 116 | "wildcard": { |
71 | 117 | typeDesc: |
72 | 118 | "A wildcard project should be a project that is not one of the other types", |
73 | 119 | playableDesc: |
74 | | - "This should be a link that lets us access your project. please provide associated documentation on how to run/use it" |
| 120 | + "This should be an experienceable link (a URL where anyone can try your project now). Make sure to include documentation on how to use it if necessary." |
75 | 121 | }, |
76 | 122 | all: { |
77 | | - descDesc: "description", |
78 | | - repoDesc: "This needs to be a publicly accessible repository!", |
| 123 | + screenshotDesc: "This should be a screenshot of your project working.", |
| 124 | + descDesc: "This should be a 2-4 sentence description of your project. What is it about? What does it do?", |
| 125 | + repoDesc: "This needs to be a publicly accessible GitHub repository!", |
79 | 126 | }, |
80 | 127 | } as Dynamic<any>; |
81 | 128 |
|
|
235 | 282 | <div class="project-submit-form"> |
236 | 283 | <div class="field"> |
237 | 284 | <p class="label required">Screenshot</p> |
| 285 | + <p class="info">{copy.all.screenshotDesc}</p> |
238 | 286 | <input |
239 | 287 | type="file" |
240 | 288 | id="project-screenshot" |
|
294 | 342 | <option value="mobile_app">Mobile App</option> |
295 | 343 | <option value="wildcard">Wildcard</option> |
296 | 344 | </select> |
297 | | - <p class="info">{copy[projectType].typeDesc}</p> |
| 345 | + <!-- <p class="info">{copy[projectType].typeDesc}</p> --> |
298 | 346 | </div> |
299 | 347 | <div class="field"> |
300 | 348 | <label for="project-desc" class="required">Description</label> |
|
540 | 588 | </h1> |
541 | 589 | </div> |
542 | 590 | <div class="subheading"> |
543 | | - <h2>Complete the pre-submit checklist</h2> |
| 591 | + <h2><strong>Shipped Project Requirements</strong><br>Every project submitted must be fully “shipped.” Use the checklists below to confirm your project qualifies.</h2> |
544 | 592 | </div> |
545 | 593 | <div class="project-submit-form"> |
546 | 594 | <form class="checklist"> |
547 | 595 | {#each Object.keys(checklist) as checklistItem} |
548 | 596 | <div class="checklist-item"> |
549 | | - <label for={checklistItem} class="required">{checklistItem}</label> |
550 | 597 | <div class="checkbox-container"> |
551 | 598 | <input |
552 | 599 | type="checkbox" |
|
558 | 605 | <p>{checklist[checklistItem] ? '✓' : '✖︎'}</p> |
559 | 606 | </div> |
560 | 607 | </div> |
| 608 | + <label for={checklistItem} class="required">{checklistItem}</label> |
561 | 609 | </div> |
562 | 610 | {/each} |
563 | 611 | </form> |
|
582 | 630 | scrollbar-color: white #3b3153; |
583 | 631 |
|
584 | 632 | height: max-content; |
| 633 | +
|
| 634 | + margin-bottom: 32px; |
585 | 635 | } |
586 | 636 |
|
587 | 637 | .field { |
|
694 | 744 | } |
695 | 745 |
|
696 | 746 | .subheading { |
697 | | - font-family: "PT Sans", sans-serif; |
| 747 | + font-family: "PT Serif", sans-serif; |
698 | 748 | color: white; |
699 | 749 |
|
700 | 750 | display: flex; |
|
768 | 818 |
|
769 | 819 | display: flex; |
770 | 820 | flex-direction: row; |
771 | | - justify-content: space-between; |
| 821 | + justify-content: start; |
772 | 822 | gap: 8px; |
773 | 823 |
|
774 | 824 | h2 { |
|
811 | 861 | display: flex; |
812 | 862 | flex-direction: column; |
813 | 863 | gap: 24px; |
814 | | - max-width: 500px; |
| 864 | + max-width: 800px; |
| 865 | +
|
| 866 | + padding: 24px; |
| 867 | + border-radius: 16px; |
| 868 | + background-color: #372f4b; |
815 | 869 | } |
816 | 870 |
|
817 | 871 | .checklist-item { |
818 | 872 | display: flex; |
819 | | - justify-content: space-between; |
| 873 | + justify-content: start; |
| 874 | + align-items: center; |
820 | 875 | flex-direction: row; |
821 | | - gap: 8px; |
| 876 | + gap: 16px; |
822 | 877 |
|
823 | 878 | label { |
824 | 879 | font-family: "PT Sans", sans-serif; |
825 | 880 | font-size: 20px; |
826 | 881 | color: white; |
| 882 | + text-align: left; |
827 | 883 | } |
828 | 884 | } |
829 | 885 |
|
|
0 commit comments