{"id":16635832,"url":"https://github.com/ythecombinator/lumberpack","last_synced_at":"2025-10-30T06:30:54.323Z","repository":{"id":35229440,"uuid":"39488763","full_name":"ythecombinator/lumberpack","owner":"ythecombinator","description":"⚠ u n m a i n t a i n e d ⚠ Easily create projects with a bunch of cool technologies.","archived":false,"fork":false,"pushed_at":"2015-08-05T05:01:46.000Z","size":1756,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-02-27T12:17:10.261Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ythecombinator.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-07-22T06:08:26.000Z","updated_at":"2017-08-08T00:28:05.000Z","dependencies_parsed_at":"2022-09-16T15:20:19.933Z","dependency_job_id":null,"html_url":"https://github.com/ythecombinator/lumberpack","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ythecombinator%2Flumberpack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ythecombinator%2Flumberpack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ythecombinator%2Flumberpack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ythecombinator%2Flumberpack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ythecombinator","download_url":"https://codeload.github.com/ythecombinator/lumberpack/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219856616,"owners_count":16556082,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-12T06:04:58.716Z","updated_at":"2025-10-30T06:30:53.947Z","avatar_url":"https://github.com/ythecombinator.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[ ![Codeship Status for mabrasil/lumberpack](https://codeship.com/projects/e5c0fd40-146c-0133-f7df-26b4121038d9/status?branch=master)](https://codeship.com/projects/93079)\n[![Build Status](https://travis-ci.org/mabrasil/lumberpack.svg?branch=master)](https://travis-ci.org/mabrasil/lumberpack)\n[![Code Climate](https://codeclimate.com/github/mabrasil/lumberpack/badges/gpa.svg)](https://codeclimate.com/github/mabrasil/lumberpack)\n[![Dependency Status](https://david-dm.org/mabrasil/lumberpack.png)](https://david-dm.org/mabrasil/lumberpack)\n[![devDependency Status](https://david-dm.org/mabrasil/lumberpack/dev-status.svg)](https://david-dm.org/mabrasil/lumberpack#info=devDependencies)\n\n# The 21st Century's Lumberjack's Boilerplate\n\n![The tooling kit for modern lumbers](src/images/logo.png)\n\n\u003e A simple boilerplate to easily bootstrap projects with a bunch of cool technologies.\n\n##Table of Contents\n\n- [What's inside?](#whats-inside)\n- [Using](#using)\n- [Contributing](#contributing)\n- [License](#license)\n- [Credits](#credits)\n\n## What's inside?\n\nWell, a modern lumberjack has many modern needings and it is only fair that (s)he uses some of the coolest\ntechnologies we have today, so this boilerplate includes:\n\n### Livescript\n\n[LiveScript](http://livescript.net/) is a JavaScript preprocessor which has a pretty *beautiful syntax* and\nsupports functional programming with lovable features like *currying*, *function composition*, *pattern matching* and\nmany other ones borrowed from languages like [Haskell](https://www.haskell.org/).\n\n### Jade\n\nThe  [Jade Engine](http://jade-lang.com/)  is one of the most powerful templating engines we have nowadays and its use is intended to make the app templates' code more beautiful and **easier to maintain**. It also aims to solve some problems such as missing or mal-matched closing tags.\n\n### Stylus\n\n[Stylus](https://learnboost.github.io/stylus/) has everything that modern *CSS preprocessors* should have: *variables*,\n*mixins*, *nesting*, *extending* and many other cool things. And it's writen in Javascript and runs in *NodeJS*.\n\n#### Stylint\n\nPersonally, I do think that one of the points considered as favorable to Stylus may not be that good: a more permissive syntax. But we can use a [linter](https://github.com/rossPatton/stylint) to make things more strict and enjoy the benefits of a *full JS-based stack*.\n\n#### Skeleton\n\n[Skeleton](http://getskeleton.com/) which is an amazingly simple and responsive boilerplate for Mobile-Friendly\ndevelopment.\n\nAll styles used here were taken from *Skeleton*'s original styles and ported to *Stylus*.\n\n### Gulp\n\n*Stream-based build system*, *code over configuration*, *idiomatic Node modules*, a *simple and elegant API*...\nThere are many reasons why [Gulp](http://gulpjs.com/) can be a good bet on task runners.\n\nHere we have many cool plugins like `Browser Sync` - which allows you to sync all your devices and even make\nlivereloading -, `Jade`, `Stylus`, `Imagemin` and many other good ones.\n\nIn this project, we also prevent your `gulpfile.js` from growing too large by splitting it into multiple files,\nwith one task per file. You can check out the [tasks directory](gulp/tasks) to see how it works.\n\n## Using\n\n### Getting Started\n\n1. Make sure you have the main dependencies to run this boilerplate:\n\n  - [NodeJS](http://nodejs.org/)\n  - [GulpJS](http://gulpjs.com/)\n  - [Livescript](http://livescript.net/)\n\n2. Clone this repository:\n\n  ```sh\n  $ git clone https://github.com/mabrasil/lumberpack.git my_project\n  ```\n\n3. Install all dependencies:\n\n  ```sh\n  $ cd my_project\n  $ npm install\n  ```\n\n4. Run the default gulp task:\n\n  ```sh\n  $ gulp\n  ```\n\n### Next Steps\n\n#### Understand the Folders and Files structure\n\nIf everything from the [Getting Started](#getting-started) section goes well, you should have this:\n\n```\n|-- gulp/\n|-- src/\n|   |-- images/\n|   |-- scripts/\n|   |-- styles/\n|   |-- templates/\n|   |-- config.json\n|-- www/\n|   |-- css/\n|       |-- main.css\n|   |-- img/\n|   |-- js/\n|       |-- main.js\n|   |-- index.html\n|-- .editorconfig\n|-- .stylintrc\n|-- gulpfile.js\n|-- package.json\n```\n\nNow let's find out what each one of those files and folders mean.\n\nP.S.: Some very commom files - or less important - are shown here, such as the `.md` ones - *README*, *LICENSE* *CONTRIBUTING* -, the CIs tracking files like `.codeclimate.yml` or `.travis.yml` and others.\n\n##### [`gulp/`](/gulp/)\n\nContains the module with all the *gulp tasks*.\n\n##### [`src/images/`](/src/images/)\n\nContains the the *images* that will be used in your project.\n\n##### [`src/scripts/`](/src/scripts/)\n\nContains the *scripts* - written in *Livescript* - that will be used in your project.\n\n##### [`src/styles/`](/src/styles/)\n\nContains the *styles* - written in *Stylus* - that will be used in your project.\n\n##### [`src/templates/`](/src/templates/)\n\nContains the *tamplates* - written in *Jade* - that will be used in your project.\n\n##### [`src/config.json`](/src/config.json)\n\nContains some of basic info from your site that will be rendered in the templates.\n\n##### www/\n\nThis is where the generated files are stored, once the tasks are finished. However, this directory is unnecessary in versioning, so it's [ignored](.gitignore).\n\n##### [`.stylintrc`](.stylintrc)\n\nIt defines some options available to stylint.\n\n##### [`gulpfile.js`](gulpfile.js)\n\nCalls the gulp tasks.\n\n##### [`package.json`](package.json)\n\nContains many metadata relevant to the project.\n\n#### Understand the Gulp Tasks\n\nAll the Gulp tasks are in the [`tasks/`](gulp/tasks) folder. Each one consists of a module with a function which is required into tasks defined in the [`gulpfile`](https://github.com/mabrasil/lumberpack/blob/master/gulpfile.js).\n\n|     Command         |                Description                |\n|---------------------|-------------------------------------------|\n| `gulp`              | Initialize watch for changes and a server |\n| `gulp ls`           | Compile Livescript files                  |\n| `gulp jade`         | Compile Jade files                        |\n| `gulp stylus`       | Compile Stylus files                      |\n| `gulp imagemin`     | Compress image files                      |\n| `gulp watch`        | Call to watch files                       |\n| `gulp deploy-rsync` | Deploy via rsync                          |\n| `gulp -p`           | Minify all files for production           |\n| `gulp build -p`     | Minify files and deploy via rsync         |\n\n#### Setup the project's basic info\n\nSome of basic info from your site will be rendered from a [`config.json`](/src/config.json) file. This is done to make it easier\nto change some general data - like the site *name* or *descrption*. The `config.json` initial structure is:\n\n```json\n{\n   \"about\":{\n      \"name\": \"\",\n      \"description\": \"\",\n      \"color\": \"\",\n      \"favicon\": \"\"\n   },\n   \"social\":{\n      \"facebook\":{\n        \"admins\":\"\",\n        \"url\": \"\",\n        \"type\": \"\",\n        \"name\": \"\",\n        \"title\": \"\",\n        \"description\": \"\",\n        \"image\": \"\"\n      },\n      \"twitter\":{\n         \"card\": \"\",\n         \"site\": \"\",\n         \"title\": \"\",\n         \"description\": \"\",\n         \"image\": \"\"\n      },\n      \"plus\":{\n         \"name\": \"\",\n         \"description\": \"\",\n         \"image\": \"\"\n      }\n   },\n   \"deploy\":{\n      \"rsync\":{\n        \"username\":\"\",\n        \"hostname\": \"\",\n        \"dest\": \"\"\n      }\n   }\n}\n\n```\n\nThese are the data given by `config.json`:\n\n##### About\n\n- `name`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003ctitle\u003e\u003c/title\u003e`\n\n- `description`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta name=\"description\" content=\"\"\u003e`\n\n- `color`:\n\n  **Type**: `string` *(#HEX)*\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta name=\"theme-color\" content=\"\"\u003e`\n\n- `favicon`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003clink rel=\"icon\" type=\"image/png\" href=\"\"\u003e`\n\n##### Social\n\n###### Facebook\n\n- `admins`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta property=\"fb:admins\" content=\"\"\u003e`\n\n- `url`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta property=\"og:url\" content=\"\"\u003e`\n\n- `type`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta property=\"og:type\" content=\"\"\u003e`\n\n- `name`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta property=\"og:site_name\" content=\"\"\u003e`\n\n- `title`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta property=\"og:title\" content=\"\"\u003e`\n\n- `description`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta property=\"og:description\" content=\"\"\u003e`\n\n- `image`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta property=\"og:image\" content=\"\"\u003e`\n\n###### Twitter\n\n- `card`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta name=\"twitter:card\" content=\"\"\u003e`\n\n- `site`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta name=\"twitter:site\" content=\"\"\u003e`\n\n- `title`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta name=\"twitter:title\" content=\"\"\u003e`\n\n- `description`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta name=\"twitter:description\" content=\"\"\u003e`\n\n- `image`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta property=\"twitter:image:src\" content=\"\"\u003e`\n\n###### Google Plus\n\n- `name`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta itemprop=\"name\" content=\"\"\u003e`\n\n- `description`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta itemprop=\"description\" content=\"\"\u003e`\n\n- `image`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Equivalent**: `\u003cmeta itemprop=\"image\" content=\"\"\u003e`\n\n##### Deploy\n\n###### Rsync\n\n- `username`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Description**: Your username at the remote server.\n\n- `hostname`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Description**: Your server domain (URL).\n\n- `dest`:\n\n  **Type**: `string`\n\n  **Default**: `\"\"`\n\n  **Description**: Path on the server that will receive the files.\n\n##### Example\n\nHere's an example on how to fill your `config.json` file. Try it (:\n\n```json\n{\n   \"about\":{\n      \"name\": \"Lumberpack\",\n      \"description\": \"Lumberpack is a simple boilerplate to easily bootstrap projects with a bunch of cool technologies.\",\n      \"color\": \"#c0392b\",\n      \"favicon\": \"img/favicon.png\"\n   },\n   \"social\":{\n      \"facebook\":{\n        \"admins\":\"\",\n        \"url\": \"https://github.com/mabrasil/lumberpack\",\n        \"type\": \"website\",\n        \"name\": \"Lumberpack\",\n        \"title\": \"Lumberpack\",\n        \"description\": \"Lumberpack is a simple boilerplate to easily bootstrap projects with a bunch of cool technologies.\",\n        \"image\": \"img/logo.png\"\n      },\n      \"twitter\":{\n         \"card\": \"summary_large_image\",\n         \"site\": \"@mabrasil_io\",\n         \"title\": \"Lumberpack\",\n         \"description\": \"Lumberpack is a simple boilerplate to easily bootstrap projects with a bunch of cool technologies.\",\n         \"image\": \"img/logo.png\"\n      },\n      \"plus\":{\n         \"name\": \"Lumberpack\",\n         \"description\": \"Lumberpack is a simple boilerplate to easily bootstrap projects with a bunch of cool technologies.\",\n         \"image\": \"img/logo.png\"\n      }\n   },\n   \"deploy\":{\n      \"rsync\":{\n        \"username\":\"mabrasil\",\n        \"hostname\": \"mabrasil.rocks\",\n        \"dest\": \"/path/to/www\"\n      }\n   }\n}\n```\n\nIf everything happens okay, you must see something like this:\n\n![Screenshot](/screenshot.png)\n\n## Contributing\n\n### Versioning\n\nIt is intended to maintain this project under the [Semantic Versioning] (http://semver.org/) guidelines. Releases will\nbe numbered with the following format:\n\n`\u003cmajor\u003e.\u003cminor\u003e.\u003cpatch\u003e`\n\n### Reporting a bug\n\n1. Look for any related issues [here](https://github.com/mabrasil/lumberpack/issues).\n2. If you find an issue that seems related, please comment there instead of creating a new issue. If it is determined to be a unique bug, we will let you know that a new issue can be created.\n3. If you find no related issue, create a new issue by clicking [here](https://github.com/mabrasil/lumberpack/issues/new).\nIf we find an issue that's related, we will reference it and close your issue, showing you where to follow the bug.\n4. Tell us important details like what operating system you are using.\n5. Include any errors that may be displayed (see [Chrome Console instructions](https://developer.chrome.com/devtools/docs/console#opening_the_console) for how to do that).\n6. Update us if you have any new info, or if the problem resolves itself!\n\n### The 5 magic steps\n\n1. Fork it!\n2. Create your feature branch: `git checkout -b my-new-feature`\n3. Commit your changes: `git commit -m 'Add some feature'`\n4. Push to the branch: `git push origin my-new-feature`\n5. Submit a pull request :)\n\n##License\n\n[Lumberpack](https://github.com/mabrasil/lumberpack) is distributed under the\nMIT License, available in this repository. All contributions are assumed to be also licensed under\nthe MIT License.\n\n## Credits\n\n- All styles were taken from [Dave Gamache](https://github.com/dhg)'s [Skeleton](https://github.com/dhg/Skeleton).\n\n- Part of this project's original structure - some tasks and directories organization - was tasks taken\nfrom [Willian Justen](https://github.com/willianjusten)'s [Fast Boilerplate](https://github.com/willianjusten/Fast) -\nmaybe now the two projects look very different.\n\n- Font used in logo: [Pinewood](http://www.fontspace.com/rick-mueller/pinewood) by [Rick Mueller](http://moorstation.org/typoasis/designers/mueller/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fythecombinator%2Flumberpack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fythecombinator%2Flumberpack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fythecombinator%2Flumberpack/lists"}