├── .gitignore ├── 01-tinder-swipe ├── index.html ├── iphone.webp ├── photos │ ├── 1.webp │ └── 2.webp ├── tinder-icons.webp └── tinder-logo.webp ├── 02-arkanoid-game ├── bkg.png ├── bricks.png ├── index.html └── sprite.png ├── 03-midu-typing-game ├── data.js └── index.html ├── LICENSE.md ├── README.md └── web ├── README.md ├── astro.config.mjs ├── package.json ├── pnpm-lock.yaml ├── public ├── favicon.svg ├── me-blue.webp ├── me.webp ├── og.jpg ├── projects │ ├── 01-tinder-swipe │ │ ├── index.html │ │ ├── iphone.webp │ │ ├── photos │ │ │ ├── 1.webp │ │ │ └── 2.webp │ │ ├── tinder-icons.webp │ │ └── tinder-logo.webp │ ├── 01.webp │ ├── 02-arkanoid-game │ │ ├── bkg.png │ │ ├── bricks.png │ │ ├── index.html │ │ └── sprite.png │ ├── 02.webp │ ├── 03-midu-typing-game │ │ ├── data.js │ │ └── index.html │ └── 03.webp └── readme.jpg ├── scripts └── copy-projects.js ├── src ├── components │ ├── Footer.astro │ ├── GitHubStar.astro │ ├── Header.astro │ ├── Hero.astro │ ├── InfoProject.astro │ └── Projects.astro ├── consts.js ├── env.d.ts ├── layouts │ └── Layout.astro └── pages │ ├── [project].astro │ └── index.astro ├── tailwind.config.mjs └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | web/dist -------------------------------------------------------------------------------- /01-tinder-swipe/index.html: -------------------------------------------------------------------------------- 1 | 100 proyectos JS · 01 - Tinder Swipe 2 |
3 |
4 |
5 |
6 |
7 | Tinder Logo 8 |
9 | 10 |
11 |
12 | Álex, brown hair man, 25 years old 13 |

Álex 25

14 |
NOPE
15 | 16 |
17 | 18 |
19 | Leila, redhead, 25 years old 20 |

Leila 27

21 |
NOPE
22 | 23 |
24 | 25 | 26 | No hay más personas cerca de ti...
27 | Vuelve a intentarlo más tarde 28 |
29 |
30 | 31 | 38 |
39 |
40 |
41 | 251 | 252 | 355 | -------------------------------------------------------------------------------- /01-tinder-swipe/iphone.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/01-tinder-swipe/iphone.webp -------------------------------------------------------------------------------- /01-tinder-swipe/photos/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/01-tinder-swipe/photos/1.webp -------------------------------------------------------------------------------- /01-tinder-swipe/photos/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/01-tinder-swipe/photos/2.webp -------------------------------------------------------------------------------- /01-tinder-swipe/tinder-icons.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/01-tinder-swipe/tinder-icons.webp -------------------------------------------------------------------------------- /01-tinder-swipe/tinder-logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/01-tinder-swipe/tinder-logo.webp -------------------------------------------------------------------------------- /02-arkanoid-game/bkg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/02-arkanoid-game/bkg.png -------------------------------------------------------------------------------- /02-arkanoid-game/bricks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/02-arkanoid-game/bricks.png -------------------------------------------------------------------------------- /02-arkanoid-game/index.html: -------------------------------------------------------------------------------- 1 | Arkanoid en JavaScript 2 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 291 | -------------------------------------------------------------------------------- /02-arkanoid-game/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/02-arkanoid-game/sprite.png -------------------------------------------------------------------------------- /03-midu-typing-game/data.js: -------------------------------------------------------------------------------- 1 | export const words = [ 2 | "a", 3 | "again", 4 | "all", 5 | "also", 6 | "and", 7 | "another", 8 | "any", 9 | "around", 10 | "as", 11 | "ask", 12 | "at", 13 | "back", 14 | "because", 15 | "become", 16 | "before", 17 | "begin", 18 | "both", 19 | "but", 20 | "by", 21 | "call", 22 | "can", 23 | "change", 24 | "child", 25 | "come", 26 | "could", 27 | "course", 28 | "day", 29 | "develop", 30 | "each", 31 | "early", 32 | "end", 33 | "even", 34 | "eye", 35 | "face", 36 | "fact", 37 | "few", 38 | "first", 39 | "follow", 40 | "from", 41 | "general", 42 | "get", 43 | "give", 44 | "good", 45 | "govern", 46 | "group", 47 | "hand", 48 | "have", 49 | "he", 50 | "head", 51 | "help", 52 | "here", 53 | "high", 54 | "hold", 55 | "home", 56 | "how", 57 | "however", 58 | "if", 59 | "increase", 60 | "interest", 61 | "it", 62 | "know", 63 | "large", 64 | "last", 65 | "lead", 66 | "leave", 67 | "life", 68 | "like", 69 | "line", 70 | "little", 71 | "look", 72 | "make", 73 | "man", 74 | "may", 75 | "mean", 76 | "might", 77 | "more", 78 | "must", 79 | "need", 80 | "never", 81 | "new", 82 | "no", 83 | "now", 84 | "number", 85 | "of", 86 | "off", 87 | "old", 88 | "on", 89 | "one", 90 | "open", 91 | "or", 92 | "order", 93 | "out", 94 | "over", 95 | "own", 96 | "part", 97 | "people", 98 | "person", 99 | "place", 100 | "plan", 101 | "play", 102 | "point", 103 | "possible", 104 | "present", 105 | "problem", 106 | "program", 107 | "public", 108 | "real", 109 | "right", 110 | "run", 111 | "say", 112 | "see", 113 | "seem", 114 | "show", 115 | "small", 116 | "some", 117 | "stand", 118 | "state", 119 | "still", 120 | "such", 121 | "system", 122 | "take", 123 | "than", 124 | "that", 125 | "the", 126 | "then", 127 | "there", 128 | "these", 129 | "they", 130 | "thing", 131 | "think", 132 | "this", 133 | "those", 134 | "time", 135 | "to", 136 | "under", 137 | "up", 138 | "use", 139 | "very", 140 | "way", 141 | "what", 142 | "when", 143 | "where", 144 | "while", 145 | "will", 146 | "with", 147 | "without", 148 | "work", 149 | "world", 150 | "would", 151 | "write", 152 | "you", 153 | "she", 154 | "set", 155 | "we", 156 | "long", 157 | "in", 158 | "many", 159 | "do", 160 | "after", 161 | "which", 162 | "so", 163 | "same", 164 | "other", 165 | "house", 166 | "during", 167 | "much", 168 | "just", 169 | "consider", 170 | "since", 171 | "should", 172 | "only", 173 | "tell", 174 | "about" 175 | ] -------------------------------------------------------------------------------- /03-midu-typing-game/index.html: -------------------------------------------------------------------------------- 1 | Monkey Type Clone - Test your typing skills! ⌨️ 2 | 137 | 138 | 139 |
140 |
141 | 142 |

143 | 144 |
145 |
146 |

wpm

147 |

148 | 149 |

accuracy

150 |

151 | 152 | 160 |
161 |
162 | 163 | 164 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Attribution-NonCommercial-NoDerivatives 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 58 | International Public License 59 | 60 | By exercising the Licensed Rights (defined below), You accept and agree 61 | to be bound by the terms and conditions of this Creative Commons 62 | Attribution-NonCommercial-NoDerivatives 4.0 International Public 63 | License ("Public License"). To the extent this Public License may be 64 | interpreted as a contract, You are granted the Licensed Rights in 65 | consideration of Your acceptance of these terms and conditions, and the 66 | Licensor grants You such rights in consideration of benefits the 67 | Licensor receives from making the Licensed Material available under 68 | these terms and conditions. 69 | 70 | 71 | Section 1 -- Definitions. 72 | 73 | a. Adapted Material means material subject to Copyright and Similar 74 | Rights that is derived from or based upon the Licensed Material 75 | and in which the Licensed Material is translated, altered, 76 | arranged, transformed, or otherwise modified in a manner requiring 77 | permission under the Copyright and Similar Rights held by the 78 | Licensor. For purposes of this Public License, where the Licensed 79 | Material is a musical work, performance, or sound recording, 80 | Adapted Material is always produced where the Licensed Material is 81 | synched in timed relation with a moving image. 82 | 83 | b. Copyright and Similar Rights means copyright and/or similar rights 84 | closely related to copyright including, without limitation, 85 | performance, broadcast, sound recording, and Sui Generis Database 86 | Rights, without regard to how the rights are labeled or 87 | categorized. For purposes of this Public License, the rights 88 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 89 | Rights. 90 | 91 | c. Effective Technological Measures means those measures that, in the 92 | absence of proper authority, may not be circumvented under laws 93 | fulfilling obligations under Article 11 of the WIPO Copyright 94 | Treaty adopted on December 20, 1996, and/or similar international 95 | agreements. 96 | 97 | d. Exceptions and Limitations means fair use, fair dealing, and/or 98 | any other exception or limitation to Copyright and Similar Rights 99 | that applies to Your use of the Licensed Material. 100 | 101 | e. Licensed Material means the artistic or literary work, database, 102 | or other material to which the Licensor applied this Public 103 | License. 104 | 105 | f. Licensed Rights means the rights granted to You subject to the 106 | terms and conditions of this Public License, which are limited to 107 | all Copyright and Similar Rights that apply to Your use of the 108 | Licensed Material and that the Licensor has authority to license. 109 | 110 | g. Licensor means the individual(s) or entity(ies) granting rights 111 | under this Public License. 112 | 113 | h. NonCommercial means not primarily intended for or directed towards 114 | commercial advantage or monetary compensation. For purposes of 115 | this Public License, the exchange of the Licensed Material for 116 | other material subject to Copyright and Similar Rights by digital 117 | file-sharing or similar means is NonCommercial provided there is 118 | no payment of monetary compensation in connection with the 119 | exchange. 120 | 121 | i. Share means to provide material to the public by any means or 122 | process that requires permission under the Licensed Rights, such 123 | as reproduction, public display, public performance, distribution, 124 | dissemination, communication, or importation, and to make material 125 | available to the public including in ways that members of the 126 | public may access the material from a place and at a time 127 | individually chosen by them. 128 | 129 | j. Sui Generis Database Rights means rights other than copyright 130 | resulting from Directive 96/9/EC of the European Parliament and of 131 | the Council of 11 March 1996 on the legal protection of databases, 132 | as amended and/or succeeded, as well as other essentially 133 | equivalent rights anywhere in the world. 134 | 135 | k. You means the individual or entity exercising the Licensed Rights 136 | under this Public License. Your has a corresponding meaning. 137 | 138 | 139 | Section 2 -- Scope. 140 | 141 | a. License grant. 142 | 143 | 1. Subject to the terms and conditions of this Public License, 144 | the Licensor hereby grants You a worldwide, royalty-free, 145 | non-sublicensable, non-exclusive, irrevocable license to 146 | exercise the Licensed Rights in the Licensed Material to: 147 | 148 | a. reproduce and Share the Licensed Material, in whole or 149 | in part, for NonCommercial purposes only; and 150 | 151 | b. produce and reproduce, but not Share, Adapted Material 152 | for NonCommercial purposes only. 153 | 154 | 2. Exceptions and Limitations. For the avoidance of doubt, where 155 | Exceptions and Limitations apply to Your use, this Public 156 | License does not apply, and You do not need to comply with 157 | its terms and conditions. 158 | 159 | 3. Term. The term of this Public License is specified in Section 160 | 6(a). 161 | 162 | 4. Media and formats; technical modifications allowed. The 163 | Licensor authorizes You to exercise the Licensed Rights in 164 | all media and formats whether now known or hereafter created, 165 | and to make technical modifications necessary to do so. The 166 | Licensor waives and/or agrees not to assert any right or 167 | authority to forbid You from making technical modifications 168 | necessary to exercise the Licensed Rights, including 169 | technical modifications necessary to circumvent Effective 170 | Technological Measures. For purposes of this Public License, 171 | simply making modifications authorized by this Section 2(a) 172 | (4) never produces Adapted Material. 173 | 174 | 5. Downstream recipients. 175 | 176 | a. Offer from the Licensor -- Licensed Material. Every 177 | recipient of the Licensed Material automatically 178 | receives an offer from the Licensor to exercise the 179 | Licensed Rights under the terms and conditions of this 180 | Public License. 181 | 182 | b. No downstream restrictions. You may not offer or impose 183 | any additional or different terms or conditions on, or 184 | apply any Effective Technological Measures to, the 185 | Licensed Material if doing so restricts exercise of the 186 | Licensed Rights by any recipient of the Licensed 187 | Material. 188 | 189 | 6. No endorsement. Nothing in this Public License constitutes or 190 | may be construed as permission to assert or imply that You 191 | are, or that Your use of the Licensed Material is, connected 192 | with, or sponsored, endorsed, or granted official status by, 193 | the Licensor or others designated to receive attribution as 194 | provided in Section 3(a)(1)(A)(i). 195 | 196 | b. Other rights. 197 | 198 | 1. Moral rights, such as the right of integrity, are not 199 | licensed under this Public License, nor are publicity, 200 | privacy, and/or other similar personality rights; however, to 201 | the extent possible, the Licensor waives and/or agrees not to 202 | assert any such rights held by the Licensor to the limited 203 | extent necessary to allow You to exercise the Licensed 204 | Rights, but not otherwise. 205 | 206 | 2. Patent and trademark rights are not licensed under this 207 | Public License. 208 | 209 | 3. To the extent possible, the Licensor waives any right to 210 | collect royalties from You for the exercise of the Licensed 211 | Rights, whether directly or through a collecting society 212 | under any voluntary or waivable statutory or compulsory 213 | licensing scheme. In all other cases the Licensor expressly 214 | reserves any right to collect such royalties, including when 215 | the Licensed Material is used other than for NonCommercial 216 | purposes. 217 | 218 | 219 | Section 3 -- License Conditions. 220 | 221 | Your exercise of the Licensed Rights is expressly made subject to the 222 | following conditions. 223 | 224 | a. Attribution. 225 | 226 | 1. If You Share the Licensed Material, You must: 227 | 228 | a. retain the following if it is supplied by the Licensor 229 | with the Licensed Material: 230 | 231 | i. identification of the creator(s) of the Licensed 232 | Material and any others designated to receive 233 | attribution, in any reasonable manner requested by 234 | the Licensor (including by pseudonym if 235 | designated); 236 | 237 | ii. a copyright notice; 238 | 239 | iii. a notice that refers to this Public License; 240 | 241 | iv. a notice that refers to the disclaimer of 242 | warranties; 243 | 244 | v. a URI or hyperlink to the Licensed Material to the 245 | extent reasonably practicable; 246 | 247 | b. indicate if You modified the Licensed Material and 248 | retain an indication of any previous modifications; and 249 | 250 | c. indicate the Licensed Material is licensed under this 251 | Public License, and include the text of, or the URI or 252 | hyperlink to, this Public License. 253 | 254 | For the avoidance of doubt, You do not have permission under 255 | this Public License to Share Adapted Material. 256 | 257 | 2. You may satisfy the conditions in Section 3(a)(1) in any 258 | reasonable manner based on the medium, means, and context in 259 | which You Share the Licensed Material. For example, it may be 260 | reasonable to satisfy the conditions by providing a URI or 261 | hyperlink to a resource that includes the required 262 | information. 263 | 264 | 3. If requested by the Licensor, You must remove any of the 265 | information required by Section 3(a)(1)(A) to the extent 266 | reasonably practicable. 267 | 268 | 269 | Section 4 -- Sui Generis Database Rights. 270 | 271 | Where the Licensed Rights include Sui Generis Database Rights that 272 | apply to Your use of the Licensed Material: 273 | 274 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 275 | to extract, reuse, reproduce, and Share all or a substantial 276 | portion of the contents of the database for NonCommercial purposes 277 | only and provided You do not Share Adapted Material; 278 | 279 | b. if You include all or a substantial portion of the database 280 | contents in a database in which You have Sui Generis Database 281 | Rights, then the database in which You have Sui Generis Database 282 | Rights (but not its individual contents) is Adapted Material; and 283 | 284 | c. You must comply with the conditions in Section 3(a) if You Share 285 | all or a substantial portion of the contents of the database. 286 | 287 | For the avoidance of doubt, this Section 4 supplements and does not 288 | replace Your obligations under this Public License where the Licensed 289 | Rights include other Copyright and Similar Rights. 290 | 291 | 292 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 293 | 294 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 295 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 296 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 297 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 298 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 299 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 300 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 301 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 302 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 303 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 304 | 305 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 306 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 307 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 308 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 309 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 310 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 311 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 312 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 313 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 314 | 315 | c. The disclaimer of warranties and limitation of liability provided 316 | above shall be interpreted in a manner that, to the extent 317 | possible, most closely approximates an absolute disclaimer and 318 | waiver of all liability. 319 | 320 | 321 | Section 6 -- Term and Termination. 322 | 323 | a. This Public License applies for the term of the Copyright and 324 | Similar Rights licensed here. However, if You fail to comply with 325 | this Public License, then Your rights under this Public License 326 | terminate automatically. 327 | 328 | b. Where Your right to use the Licensed Material has terminated under 329 | Section 6(a), it reinstates: 330 | 331 | 1. automatically as of the date the violation is cured, provided 332 | it is cured within 30 days of Your discovery of the 333 | violation; or 334 | 335 | 2. upon express reinstatement by the Licensor. 336 | 337 | For the avoidance of doubt, this Section 6(b) does not affect any 338 | right the Licensor may have to seek remedies for Your violations 339 | of this Public License. 340 | 341 | c. For the avoidance of doubt, the Licensor may also offer the 342 | Licensed Material under separate terms or conditions or stop 343 | distributing the Licensed Material at any time; however, doing so 344 | will not terminate this Public License. 345 | 346 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 347 | License. 348 | 349 | 350 | Section 7 -- Other Terms and Conditions. 351 | 352 | a. The Licensor shall not be bound by any additional or different 353 | terms or conditions communicated by You unless expressly agreed. 354 | 355 | b. Any arrangements, understandings, or agreements regarding the 356 | Licensed Material not stated herein are separate from and 357 | independent of the terms and conditions of this Public License. 358 | 359 | 360 | Section 8 -- Interpretation. 361 | 362 | a. For the avoidance of doubt, this Public License does not, and 363 | shall not be interpreted to, reduce, limit, restrict, or impose 364 | conditions on any use of the Licensed Material that could lawfully 365 | be made without permission under this Public License. 366 | 367 | b. To the extent possible, if any provision of this Public License is 368 | deemed unenforceable, it shall be automatically reformed to the 369 | minimum extent necessary to make it enforceable. If the provision 370 | cannot be reformed, it shall be severed from this Public License 371 | without affecting the enforceability of the remaining terms and 372 | conditions. 373 | 374 | c. No term or condition of this Public License will be waived and no 375 | failure to comply consented to unless expressly agreed to by the 376 | Licensor. 377 | 378 | d. Nothing in this Public License constitutes or may be interpreted 379 | as a limitation upon, or waiver of, any privileges and immunities 380 | that apply to the Licensor or You, including from the legal 381 | processes of any jurisdiction or authority. 382 | 383 | ======================================================================= 384 | 385 | Creative Commons is not a party to its public 386 | licenses. Notwithstanding, Creative Commons may elect to apply one of 387 | its public licenses to material it publishes and in those instances 388 | will be considered the “Licensor.” The text of the Creative Commons 389 | public licenses is dedicated to the public domain under the CC0 Public 390 | Domain Dedication. Except for the limited purpose of indicating that 391 | material is shared under a Creative Commons public license or as 392 | otherwise permitted by the Creative Commons policies published at 393 | creativecommons.org/policies, Creative Commons does not authorize the 394 | use of the trademark "Creative Commons" or any other trademark or logo 395 | of Creative Commons without its prior written consent including, 396 | without limitation, in connection with any unauthorized modifications 397 | to any of its public licenses or any other arrangements, 398 | understandings, or agreements concerning use of licensed material. For 399 | the avoidance of doubt, this paragraph does not form part of the 400 | public licenses. 401 | 402 | Creative Commons may be contacted at creativecommons.org. 403 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 |

6 | 100 proyectos de JavaScript con código y vídeos 7 |

8 |
9 | 10 |
11 | 12 | Website 13 | 14 |  ❖  15 | 16 | Proyectos 17 | 18 |  ❖  19 | 20 | Contribuir 21 | 22 |  ❖  23 | 24 | YouTube 25 | 26 |  ❖  27 | 28 | Twitter 29 | 30 |  ❖  31 | 32 | Twitch 33 | 34 |
35 | 36 |

37 | 38 |
39 | 40 | ![JavaScript Badge](https://img.shields.io/badge/JavaScript-F7DF1E?logo=javascript&logoColor=000&style=flat) 41 | ![GitHub stars](https://img.shields.io/github/stars/midudev/javascript-100-proyectos) 42 | ![GitHub issues](https://img.shields.io/github/issues/midudev/javascript-100-proyectos) 43 | ![GitHub forks](https://img.shields.io/github/forks/midudev/javascript-100-proyectos) 44 | ![GitHub PRs](https://img.shields.io/github/issues-pr/midudev/javascript-100-proyectos) 45 | ![Astro Badge](https://img.shields.io/badge/Astro-BC52EE?logo=astro&logoColor=fff&style=flat) 46 | 47 |
48 | 49 | ## ✨ Proyectos 50 | 51 | | # | Proyecto | Descripción | Código | Website | 52 | | --- | ---------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | 53 | | 1 | **tinder-swipe** | Aprende a crear el efecto de swipe de Tinder con HTML, CSS y JavaScript. | [![GitHub Badge](https://img.shields.io/badge/Código-181717?logo=github&logoColor=fff&style=flat-square)](https://github.com/midudev/javascript-100-proyectos/tree/main/01-tinder-swipe) | [![Vercel Badge](https://img.shields.io/badge/Website-000?logo=vercel&logoColor=fff&style=flat-square)](https://www.javascript100.dev/01-tinder-swipe) | 54 | | 2 | **arkanoid-game** | Juego mítico y clásico de Arkanoid para controlar con teclado. | [![GitHub Badge](https://img.shields.io/badge/Código-181717?logo=github&logoColor=fff&style=flat-square)](https://github.com/midudev/javascript-100-proyectos/tree/main/02-arkanoid-game) | [![Vercel Badge](https://img.shields.io/badge/Website-000?logo=vercel&logoColor=fff&style=flat-square)](https://www.javascript100.dev/02-arkanoid-game) | 55 | | 3 | **mecanografía** | Pon a prueba a qué velocidad tecleas | [![GitHub Badge](https://img.shields.io/badge/Código-181717?logo=github&logoColor=fff&style=flat-square)](https://github.com/midudev/javascript-100-proyectos/tree/main/03-midu-typing-game) | [![Vercel Badge](https://img.shields.io/badge/Website-000?logo=vercel&logoColor=fff&style=flat-square)](https://www.javascript100.dev/03-midu-typing-game) | 56 | 57 | ## 🚀 Contribuir 58 | 59 | ### **Introducción** 60 | 61 | 1. Para contribuir, crea un [Fork](https://github.com/midudev/javascript-100-proyectos/fork) del proyecto. 62 | 63 | 2. Clona el repositorio en tu máquina local: 64 | 65 | ```bash 66 | git clone git@github.com:tu_username/javascript-100-proyectos.git 67 | ``` 68 | 69 | ### **Proyectos** 70 | 71 | 1. Accede a la carpeta del proyecto que quieras: 72 | 73 | ```bash 74 | cd 01-tinder-swipe 75 | ``` 76 | 77 | 2. Instala la extensión [**Live Preview**](https://marketplace.visualstudio.com/items?itemName=ms-vscode.live-server) en Visual Studio Code. 78 | 79 | 3. Presiona `F1` y selecciona `Live Preview: Start Server`. 80 | 81 | Realiza los cambios y crea una pull request 🚀. 82 | 83 | ### **Sitio web** 84 | 85 | - Para contribuir al sitio web es necesario tener [Node.js +18](https://nodejs.org/) instalado y [pnpm](https://pnpm.io/): 86 | 87 | ```bash 88 | npm install -g pnpm 89 | ``` 90 | 91 | 1. Instala las dependencias: 92 | 93 | ```bash 94 | cd web 95 | pnpm install 96 | ``` 97 | 98 | 2. Inicia el servidor de desarrollo: 99 | 100 | ```bash 101 | pnpm dev 102 | ``` 103 | 104 | Realiza los cambios y crea una pull request 🚀. 105 | 106 | ## 🛠️ Stack 107 | 108 | **Proyectos**: 109 | 110 | - HTML, CSS & Javascript. 111 | 112 | **Website**: 113 | 114 | - [**Astro**](https://astro.build/) - The web framework for content-driven websites. 115 | - [**Typescript**](https://www.typescriptlang.org/) - JavaScript with syntax for types. 116 | - [**Tailwind CSS**](https://tailwindcss.com/) - A utility-first CSS framework for rapidly building custom designs. 117 | - [**@midudev/tailwind-animations**](https://tailwindcss-animations.vercel.app) - Easy peasy animations for your Tailwind project. 118 | 119 | ## 👑 Contribuidores 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /web/README.md: -------------------------------------------------------------------------------- 1 | # Astro Starter Kit: Basics 2 | 3 | ```sh 4 | npm create astro@latest -- --template basics 5 | ``` 6 | 7 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics) 8 | [![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/basics) 9 | [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/basics/devcontainer.json) 10 | 11 | > 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! 12 | 13 | ![just-the-basics](https://github.com/withastro/astro/assets/2244813/a0a5533c-a856-4198-8470-2d67b1d7c554) 14 | 15 | ## 🚀 Project Structure 16 | 17 | Inside of your Astro project, you'll see the following folders and files: 18 | 19 | ```text 20 | / 21 | ├── public/ 22 | │ └── favicon.svg 23 | ├── src/ 24 | │ ├── components/ 25 | │ │ └── Card.astro 26 | │ ├── layouts/ 27 | │ │ └── Layout.astro 28 | │ └── pages/ 29 | │ └── index.astro 30 | └── package.json 31 | ``` 32 | 33 | Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. 34 | 35 | There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. 36 | 37 | Any static assets, like images, can be placed in the `public/` directory. 38 | 39 | ## 🧞 Commands 40 | 41 | All commands are run from the root of the project, from a terminal: 42 | 43 | | Command | Action | 44 | | :------------------------ | :----------------------------------------------- | 45 | | `npm install` | Installs dependencies | 46 | | `npm run dev` | Starts local dev server at `localhost:4321` | 47 | | `npm run build` | Build your production site to `./dist/` | 48 | | `npm run preview` | Preview your build locally, before deploying | 49 | | `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | 50 | | `npm run astro -- --help` | Get help using the Astro CLI | 51 | 52 | ## 👀 Want to learn more? 53 | 54 | Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). 55 | -------------------------------------------------------------------------------- /web/astro.config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'astro/config'; 2 | 3 | import tailwind from "@astrojs/tailwind"; 4 | 5 | // https://astro.build/config 6 | export default defineConfig({ 7 | integrations: [tailwind()] 8 | }); -------------------------------------------------------------------------------- /web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-100-web", 3 | "type": "module", 4 | "version": "0.0.1", 5 | "scripts": { 6 | "prepare": "node ./scripts/copy-projects.js", 7 | "dev": "astro dev", 8 | "start": "astro dev", 9 | "build": "astro check && astro build", 10 | "preview": "astro preview", 11 | "astro": "astro" 12 | }, 13 | "dependencies": { 14 | "@astrojs/check": "0.5.10", 15 | "@astrojs/tailwind": "5.1.0", 16 | "@midudev/tailwind-animations": "0.0.7", 17 | "astro": "4.5.12", 18 | "tailwindcss": "3.4.3", 19 | "typescript": "5.4.3" 20 | } 21 | } -------------------------------------------------------------------------------- /web/public/favicon.svg: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /web/public/me-blue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/me-blue.webp -------------------------------------------------------------------------------- /web/public/me.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/me.webp -------------------------------------------------------------------------------- /web/public/og.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/og.jpg -------------------------------------------------------------------------------- /web/public/projects/01-tinder-swipe/index.html: -------------------------------------------------------------------------------- 1 | 100 proyectos JS · 01 - Tinder Swipe 2 |
3 |
4 |
5 |
6 |
7 | Tinder Logo 8 |
9 | 10 |
11 |
12 | Álex, brown hair man, 25 years old 13 |

Álex 25

14 |
NOPE
15 | 16 |
17 | 18 |
19 | Leila, redhead, 25 years old 20 |

Leila 27

21 |
NOPE
22 | 23 |
24 | 25 | 26 | No hay más personas cerca de ti...
27 | Vuelve a intentarlo más tarde 28 |
29 |
30 | 31 | 38 |
39 |
40 |
41 | 251 | 252 | 355 | -------------------------------------------------------------------------------- /web/public/projects/01-tinder-swipe/iphone.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/projects/01-tinder-swipe/iphone.webp -------------------------------------------------------------------------------- /web/public/projects/01-tinder-swipe/photos/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/projects/01-tinder-swipe/photos/1.webp -------------------------------------------------------------------------------- /web/public/projects/01-tinder-swipe/photos/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/projects/01-tinder-swipe/photos/2.webp -------------------------------------------------------------------------------- /web/public/projects/01-tinder-swipe/tinder-icons.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/projects/01-tinder-swipe/tinder-icons.webp -------------------------------------------------------------------------------- /web/public/projects/01-tinder-swipe/tinder-logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/projects/01-tinder-swipe/tinder-logo.webp -------------------------------------------------------------------------------- /web/public/projects/01.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/projects/01.webp -------------------------------------------------------------------------------- /web/public/projects/02-arkanoid-game/bkg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/projects/02-arkanoid-game/bkg.png -------------------------------------------------------------------------------- /web/public/projects/02-arkanoid-game/bricks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/projects/02-arkanoid-game/bricks.png -------------------------------------------------------------------------------- /web/public/projects/02-arkanoid-game/index.html: -------------------------------------------------------------------------------- 1 | Arkanoid en JavaScript 2 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /web/public/projects/02-arkanoid-game/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/projects/02-arkanoid-game/sprite.png -------------------------------------------------------------------------------- /web/public/projects/02.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/projects/02.webp -------------------------------------------------------------------------------- /web/public/projects/03-midu-typing-game/data.js: -------------------------------------------------------------------------------- 1 | export const words = [ 2 | "a", 3 | "again", 4 | "all", 5 | "also", 6 | "and", 7 | "another", 8 | "any", 9 | "around", 10 | "as", 11 | "ask", 12 | "at", 13 | "back", 14 | "because", 15 | "become", 16 | "before", 17 | "begin", 18 | "both", 19 | "but", 20 | "by", 21 | "call", 22 | "can", 23 | "change", 24 | "child", 25 | "come", 26 | "could", 27 | "course", 28 | "day", 29 | "develop", 30 | "each", 31 | "early", 32 | "end", 33 | "even", 34 | "eye", 35 | "face", 36 | "fact", 37 | "few", 38 | "first", 39 | "follow", 40 | "from", 41 | "general", 42 | "get", 43 | "give", 44 | "good", 45 | "govern", 46 | "group", 47 | "hand", 48 | "have", 49 | "he", 50 | "head", 51 | "help", 52 | "here", 53 | "high", 54 | "hold", 55 | "home", 56 | "how", 57 | "however", 58 | "if", 59 | "increase", 60 | "interest", 61 | "it", 62 | "know", 63 | "large", 64 | "last", 65 | "lead", 66 | "leave", 67 | "life", 68 | "like", 69 | "line", 70 | "little", 71 | "look", 72 | "make", 73 | "man", 74 | "may", 75 | "mean", 76 | "might", 77 | "more", 78 | "must", 79 | "need", 80 | "never", 81 | "new", 82 | "no", 83 | "now", 84 | "number", 85 | "of", 86 | "off", 87 | "old", 88 | "on", 89 | "one", 90 | "open", 91 | "or", 92 | "order", 93 | "out", 94 | "over", 95 | "own", 96 | "part", 97 | "people", 98 | "person", 99 | "place", 100 | "plan", 101 | "play", 102 | "point", 103 | "possible", 104 | "present", 105 | "problem", 106 | "program", 107 | "public", 108 | "real", 109 | "right", 110 | "run", 111 | "say", 112 | "see", 113 | "seem", 114 | "show", 115 | "small", 116 | "some", 117 | "stand", 118 | "state", 119 | "still", 120 | "such", 121 | "system", 122 | "take", 123 | "than", 124 | "that", 125 | "the", 126 | "then", 127 | "there", 128 | "these", 129 | "they", 130 | "thing", 131 | "think", 132 | "this", 133 | "those", 134 | "time", 135 | "to", 136 | "under", 137 | "up", 138 | "use", 139 | "very", 140 | "way", 141 | "what", 142 | "when", 143 | "where", 144 | "while", 145 | "will", 146 | "with", 147 | "without", 148 | "work", 149 | "world", 150 | "would", 151 | "write", 152 | "you", 153 | "she", 154 | "set", 155 | "we", 156 | "long", 157 | "in", 158 | "many", 159 | "do", 160 | "after", 161 | "which", 162 | "so", 163 | "same", 164 | "other", 165 | "house", 166 | "during", 167 | "much", 168 | "just", 169 | "consider", 170 | "since", 171 | "should", 172 | "only", 173 | "tell", 174 | "about" 175 | ] -------------------------------------------------------------------------------- /web/public/projects/03-midu-typing-game/index.html: -------------------------------------------------------------------------------- 1 | Monkey Type Clone - Test your typing skills! ⌨️ 2 | 137 | 138 | 139 |
140 |
141 | 142 |

143 | 144 |
145 |
146 |

wpm

147 |

148 | 149 |

accuracy

150 |

151 | 152 | 160 |
161 |
162 | 163 | 164 | -------------------------------------------------------------------------------- /web/public/projects/03.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/projects/03.webp -------------------------------------------------------------------------------- /web/public/readme.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devsy-io/javascript-100-proyectos/cf7e8333eb616694b47bd104556acf776b803770/web/public/readme.jpg -------------------------------------------------------------------------------- /web/scripts/copy-projects.js: -------------------------------------------------------------------------------- 1 | import fs from 'node:fs/promises' 2 | 3 | const files = await fs.readdir('../') 4 | 5 | const projects = files.filter(file => /^[0-9]/.test(file)) 6 | 7 | await Promise.all( 8 | projects.map( 9 | project => fs.cp(`../${project}`, `public/projects/${project}`, { recursive: true }) 10 | ) 11 | ) 12 | 13 | -------------------------------------------------------------------------------- /web/src/components/Footer.astro: -------------------------------------------------------------------------------- 1 | 57 | 58 | librecounter 64 | -------------------------------------------------------------------------------- /web/src/components/GitHubStar.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const response = await fetch( 3 | "https://api.github.com/repos/midudev/javascript-100-proyectos" 4 | ) 5 | 6 | const data = await response.json() 7 | 8 | const starCounter = data.stargazers_count 9 | --- 10 | 11 |
14 | 20 |
23 | 24 | 27 | 28 | 29 |
30 | 31 |
32 |
35 |
36 |
39 | {`${starCounter} estrellas en GitHub`} 42 | ¡Dale una estrella! 46 |
47 |
48 |
49 |
50 | -------------------------------------------------------------------------------- /web/src/components/Header.astro: -------------------------------------------------------------------------------- 1 |
4 |

5 |
6 | 100 10 | proyectos 13 |
14 | 15 | 16 | 23 | 24 | 27 | 28 | 29 |

30 |
31 | -------------------------------------------------------------------------------- /web/src/components/Hero.astro: -------------------------------------------------------------------------------- 1 |
2 |
3 |
6 |

7 | ¡Hola, soy midudev! Mi objetivo es mejorar la 8 | empleabilidad de la comunidad de Programación Hispana y 9 | el acceso a contenido de calidad sobre Desarrollo Web. 10 |

11 | 57 |
58 | Miguel Ángel 66 |
67 |
68 | -------------------------------------------------------------------------------- /web/src/components/InfoProject.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { info } = Astro.props 3 | const { theme = {} } = info 4 | const { isDark = false } = theme 5 | --- 6 | 7 | 57 | -------------------------------------------------------------------------------- /web/src/components/Projects.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { PROJECTS } from "../consts" 3 | --- 4 | 5 |
8 | { 9 | PROJECTS.map((project, index) => { 10 | const num = `${index + 1}`.padStart(2, "0") 11 | 12 | return ( 13 |
14 | 18 | 19 | #{num} 20 | 21 | {`Captura 26 | 27 |
28 |

29 | 33 | {project.title} 34 | 35 |

36 |

37 | {project.description} 38 |

39 |
    40 | {project.learnings.map((learning) => ( 41 |
  • 42 | {learning} 43 |
  • 44 | ))} 45 |
46 | 123 |
124 |
125 | ) 126 | }) 127 | } 128 |
131 | 137 | 153 | Próximamente en Twitch
154 | siguiente proyecto... 155 |
156 |
157 |
158 | -------------------------------------------------------------------------------- /web/src/consts.js: -------------------------------------------------------------------------------- 1 | export const PROJECTS = [ 2 | { 3 | slug: "01-tinder-swipe", 4 | title: "Tinder Swipe", 5 | description: 6 | "Aprende a crear el efecto de swipe de Tinder con HTML, CSS y JavaScript.", 7 | learnings: [ 8 | "DOM", 9 | "Animaciones con gestos", 10 | "Eventos de mouse y touch", 11 | "Transiciones CSS", 12 | ], 13 | youtube: 'https://www.youtube.com/watch?v=u01WD_YNENY' 14 | }, 15 | { 16 | slug: "02-arkanoid-game", 17 | title: "Arkanoid Game", 18 | description: 19 | "Juego mítico y clásico de Arkanoid para controlar con teclado", 20 | learnings: [ 21 | "Dibujar en Canvas", 22 | "Eventos de teclado", 23 | "RequestAnimationFrame", 24 | "Sprites" 25 | ], 26 | youtube: 'https://www.youtube.com/watch?v=b6du6MvQmuQ' 27 | }, 28 | { 29 | slug: "03-midu-typing-game", 30 | title: "Reto de Mecanografía", 31 | description: "Pon a prueba tus habilidades de mecanografía con este reto", 32 | learnings: [ 33 | "DOM", 34 | "Eventos de teclado", 35 | "Manejo de clases", 36 | "Optimización selectores" 37 | ], 38 | theme: { 39 | isDark: true 40 | }, 41 | youtube: 'https://www.youtube.com/watch?v=157qVlTelOg&t=135s' 42 | } 43 | ] -------------------------------------------------------------------------------- /web/src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /web/src/layouts/Layout.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { ViewTransitions } from "astro:transitions" 3 | 4 | interface Props { 5 | title: string 6 | } 7 | 8 | const { title } = Astro.props 9 | const description = 10 | "Proyectos prácticos para aprender JavaScript con código fuente y vídeo. Totalmente gratis." 11 | --- 12 | 13 | 14 | 15 | 16 | {title} 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /web/src/pages/[project].astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { PROJECTS } from "../consts" 3 | import InfoProject from "../components/InfoProject.astro" 4 | import Layout from "../layouts/Layout.astro" 5 | 6 | export function getStaticPaths() { 7 | return PROJECTS.map((project) => { 8 | return { 9 | params: { 10 | project: project.slug, 11 | }, 12 | } 13 | }) 14 | } 15 | 16 | const { project } = Astro.params 17 | const index = PROJECTS.findIndex((p) => p.slug === project) 18 | const info = PROJECTS[index] 19 | const number = `${index + 1}`.padStart(2, "0") 20 | --- 21 | 22 | 23 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /web/src/pages/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Layout from "../layouts/Layout.astro" 3 | import Header from "../components/Header.astro" 4 | import Hero from "../components/Hero.astro" 5 | import Projects from "../components/Projects.astro" 6 | import Footer from "../components/Footer.astro" 7 | import GitHubStar from "../components/GitHubStar.astro" 8 | --- 9 | 10 | 11 |
14 |
17 |
20 |
21 |
22 | 23 |
24 | 25 | 26 |
28 |
29 | -------------------------------------------------------------------------------- /web/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | import animations from '@midudev/tailwind-animations' 2 | 3 | /** @type {import('tailwindcss').Config} */ 4 | export default { 5 | content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'], 6 | theme: { 7 | extend: {}, 8 | }, 9 | plugins: [animations], 10 | } 11 | -------------------------------------------------------------------------------- /web/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "astro/tsconfigs/strict" 3 | } --------------------------------------------------------------------------------