├── images ├── hero.jpg ├── logo.png ├── divider01.jpg ├── divider02.jpg ├── divider03.jpg ├── divider04.jpg ├── knights01.jpg ├── knights02.jpg └── knights03.jpg ├── license ├── readme.md ├── husk-production-ready.html └── husk-example-email.html /images/hero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anseltaft/husk/HEAD/images/hero.jpg -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anseltaft/husk/HEAD/images/logo.png -------------------------------------------------------------------------------- /images/divider01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anseltaft/husk/HEAD/images/divider01.jpg -------------------------------------------------------------------------------- /images/divider02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anseltaft/husk/HEAD/images/divider02.jpg -------------------------------------------------------------------------------- /images/divider03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anseltaft/husk/HEAD/images/divider03.jpg -------------------------------------------------------------------------------- /images/divider04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anseltaft/husk/HEAD/images/divider04.jpg -------------------------------------------------------------------------------- /images/knights01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anseltaft/husk/HEAD/images/knights01.jpg -------------------------------------------------------------------------------- /images/knights02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anseltaft/husk/HEAD/images/knights02.jpg -------------------------------------------------------------------------------- /images/knights03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anseltaft/husk/HEAD/images/knights03.jpg -------------------------------------------------------------------------------- /license: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Ansel Taft 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | [![Husk: a modular and responsive HTML email framework](https://raw.githubusercontent.com/anseltaft/husk/master/images/logo.png)](https://github.com/anseltaft/husk) 2 | ![Husk's hero image](https://raw.githubusercontent.com/anseltaft/husk/master/images/hero.jpg) 3 | # Husk 4 | A modular, responsive HTML email framework for rapid development. 5 | ## Included Modules: 6 | * Logo module 7 | * Hero image module 8 | * Single column module 9 | * Two columns module 10 | * Three columns module 11 | * Button module 12 | * Show/Hide module (replacement image on mobile) 13 | * Footer module 14 | 15 | ## Bonus goodness 16 | * Baked in fixes for iOS, Android, Gmail, Yahoo Mail, and Outlook 17 | * Well documented, formated code 18 | * Social share code in `` 19 | 20 | ## Planned updates 21 | * Background image module (issue #3) 22 | * ~~Unopinionated, vanilla version for rapid development (issue #4)~~ 23 | * Dark mode support (issue #6) 24 | 25 | Many thanks to [Julie Ng](https://julie.io/) for [Antwort](https://github.com/InterNations/antwort) AKA the starting point. 26 | 27 | Additional thanks to [Litmus](https://www.litmus.com/) for testing and [Litmus](https://www.litmus.com/), [Campaign Monitor](https://www.campaignmonitor.com/), and [Email On Acid](https://www.emailonacid.com/) for clutch fixes. 28 | -------------------------------------------------------------------------------- /husk-production-ready.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | From Name | Subject Line 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 223 | 231 | 232 | 233 | 234 | 235 | 236 |
237 | Please edit this text 238 |
239 | 240 |
241 |  ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌  242 |
243 | 244 | 245 | 246 | 247 | 248 | 497 | 498 |
249 | 250 | 251 | 252 | 253 | 254 | 255 | 260 | 261 | 262 | 263 | 264 | 265 | 270 | 271 | 272 | 273 | 274 | 275 | 282 | 283 | 286 | 287 | 288 | 289 | 290 | 291 | 294 | 295 | 296 | 297 | 298 | 299 | 312 | 313 | 314 | 315 | 316 | 317 | 320 | 321 | 322 | 323 | 324 | 325 | 365 | 366 | 367 | 368 | 369 | 370 | 457 | 458 | 459 | 460 | 461 | 462 | 480 | 481 | 482 | 483 | 484 | 485 | 490 | 491 | 492 | 493 |
256 | 257 | 258 | 259 |
266 | 267 | 268 | 269 |
284 |   285 |
292 | 293 |
300 | 301 | 302 | 309 | 310 |
303 | 304 | 305 | 306 | 307 |
 
308 |
311 |
318 | 319 |
326 | 327 | 328 | 329 | 334 | 335 | 336 | 337 | 338 | 341 | 342 |
339 |   340 |
343 | 344 | 348 | 349 | 350 | 351 | 352 | 355 | 356 |
353 |   354 |
357 | 358 | 363 | 364 |
371 | 372 | 373 | 374 | 379 | 380 | 381 | 382 | 383 | 397 | 398 |
384 | 385 | 386 | 387 | 388 |
389 | 390 | 391 | 392 | 393 |
 
394 |
395 |  
396 |
399 | 400 | 404 | 405 | 406 | 407 | 408 | 422 | 423 |
409 | 410 | 411 | 412 | 413 |
414 | 415 | 416 | 417 | 418 |
 
419 |
420 |  
421 |
424 | 425 | 429 | 430 | 431 | 432 | 433 | 447 | 448 |
434 | 435 | 436 | 437 | 438 |
439 | 440 | 441 | 442 | 443 |
 
444 |
445 |  
446 |
449 | 450 | 455 | 456 |
463 | 464 | 465 | 468 | 469 |
466 | 467 |
470 | 471 | 472 | 473 | 476 | 477 | 478 | 479 |
486 | [ View in browser link ] 487 |

488 | [ Unsubscribe block ] 489 |
494 | 495 | 496 |
499 | 500 | 501 | 502 | -------------------------------------------------------------------------------- /husk-example-email.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | From Name | Subject Line 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 223 | 231 | 232 | 233 | 234 | 235 | 236 |
237 | Please edit this text 238 |
239 | 240 |
241 |  ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌  242 |
243 | 244 | 245 | 246 | 247 | 248 | 521 | 522 |
249 | 250 | 251 | 252 | 253 | 254 | 255 | 260 | 261 | 262 | 263 | 264 | 265 | 270 | 271 | 272 | 273 | 274 | 275 | 282 | 283 | 295 | 296 | 297 | 298 | 299 | 300 | 303 | 304 | 305 | 306 | 307 | 308 | 321 | 322 | 323 | 324 | 325 | 326 | 329 | 330 | 331 | 332 | 333 | 334 | 379 | 380 | 381 | 382 | 383 | 384 | 481 | 482 | 483 | 484 | 485 | 486 | 504 | 505 | 506 | 507 | 508 | 509 | 514 | 515 | 516 | 517 |
256 | 257 | Husk 258 | 259 |
266 | 267 | What? A swallow carrying a coconut? 268 | 269 |
284 | Whoa there!
285 | Soldier: Halt! Who goes there?
286 | Arthur: It is I, Arthur, son of Uther Pendragon, from the castle of Camelot. King of all Britons, defeator of the Saxons, sovereign of all England!
287 | Soldier: Get away!
288 | Arthur: I am... And this my trusty servant, Patsy. We have ridden the length and breadth of the land in search of knights who will join our court at Camelot... I must speak with your lord and master.
289 | Soldier: What? Ridden on a horse?
290 | Arthur: Yes!
291 | Soldier: You're using coconuts!
292 | Arthur: ...What?
293 | Soldier: You've got two empty halves of coconuts and you're banging them together. 294 |
301 | 302 |
309 | 310 | 311 | 318 | 319 |
312 | 313 | 314 | 315 | 316 |
Just a flesh wound!
317 |
320 |
327 | 328 |
335 | 336 | 337 | 338 | 343 | 344 | 345 | 346 | 347 | 352 | 353 |
348 | Two Columns Example:
Left column
349 |

350 | Benchmark thinking outside the box prairie dogging root-and-branch review. We've got to manage that low hanging fruit game plan, or race without a finish line can we take this offline, but out of scope. 351 |
354 | 355 | 359 | 360 | 361 | 362 | 363 | 369 | 370 |
364 | Two Columns Example:
365 | Right column
366 |

367 | Can we take this offline cross functional teams enable out of the box brainstorming, or strategic fit pig in a python strategic fit race without a finish line, nor one-sheet. 368 |
371 | 372 | 377 | 378 |
385 | 386 | 387 | 388 | 393 | 394 | 395 | 396 | 397 | 415 | 416 |
398 | 399 | 400 | 401 | 402 |
Sir Lancelot the Brave
403 | 404 | 405 | 406 | 407 |
Sir Lancelot the Brave
408 |
409 | "She turned me into a newt!" 410 |

411 | ... 412 |

413 | "Red!... I mean blue!" [falls down the crevice screaming]
414 |
417 | 418 | 422 | 423 | 424 | 425 | 426 | 442 | 443 |
427 | 428 | 429 | 430 | 431 |
Sir Robin the Not-Quite-So-Brave as Sir Lancelot
432 | 433 | 434 | 435 | 436 |
Sir Robin the Not-Quite-So-Brave as Sir Lancelot
437 |
438 | Bravely bold Sir Robin rode forth from Camelot He was not afraid to die, o' brave Sir Robin! He was not at all afraid to be killed in nasty ways, Brave, brave, brave, brave Sir Robin! He was not at not in the least bit scared to be mashed into a pulp Or to have his eyes gouged out, Or his elbows broken; To have his kneecaps split And his body burned away, Or his limbs all hacked and mangled, Brave Sir Robin! His head smashed in, his heart cut out, His liver removed, and his bowels unplugged, His nostrils raped, and his bottom burned off, And his manhood split... 439 |

440 | "Stop! That's enough singing for now."
441 |
444 | 445 | 449 | 450 | 451 | 452 | 453 | 471 | 472 |
454 | 455 | 456 | 457 | 458 |
Sir Bedevere the Wise
459 | 460 | 461 | 462 | 463 |
Sir Bedevere the Wise
464 |
465 | "How do you know so much about swallows?" 466 |

467 | ... 468 |

469 | "Well now, uh, Launcelot, Galahad, and I, wait until nightfall, and then leap out of the rabbit, taking the French by surprise - not only by surprise, but totally unarmed!"
470 |
473 | 474 | 479 | 480 |
487 | 488 | 489 | 492 | 493 |
490 | 491 |
494 | 495 | 496 | 497 | 500 | 501 | 502 | 503 |
510 | [ View in browser link ] 511 |

512 | [ Unsubscribe block ] 513 |
518 | 519 | 520 |
523 | 524 | 525 | 526 | --------------------------------------------------------------------------------