tessera-jekyll-theme 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d698752f107880b273524ba14c09d97948f37b562d26fd0852561f206edfc42e
4
+ data.tar.gz: 90068a01f33c575b1e478fc1836a5f59c01608fdb9b05552cba2ec71cf24187d
5
+ SHA512:
6
+ metadata.gz: beab1c8822c0b0820986b85f15e0a495247dd2951a9d8b224cd491e45ab61978ec9e73d259ccf8eab94a991ef93298041f5acb678b9ce9e32042d2c28e53356e
7
+ data.tar.gz: e2bbf6900573f516fb0e7d7c7a7f9655a7146c138d692a141826a94708e2244f3028b0c5073d73b6d9d3b4dec0ebde0303a6b31dc4fa7b6f69a6870649fcd4d9
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 ItsZariep
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.
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 ItsZariep
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
13
+ all 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
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,126 @@
1
+ # Tessera
2
+
3
+ Tessera is a Jekyll theme designed with content creators in mind, but like any other Jekyll theme, it can be used by anyone.
4
+
5
+ Tessera features three main components: two side panels and a central content area. The theme is highly modular, allowing you to easily customize any component by overriding the `_includes`.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your Jekyll site's `Gemfile`:
10
+
11
+ ```ruby
12
+ gem "tessera"
13
+ ```
14
+
15
+ Then add this line to your Jekyll site's `_config.yml`:
16
+
17
+ ```yaml
18
+ theme: tessera
19
+ ```
20
+
21
+ And then execute:
22
+
23
+ ```
24
+ $ bundle
25
+ ```
26
+
27
+ Or install it manually with:
28
+
29
+ ```
30
+ $ gem install tessera
31
+ ```
32
+
33
+ ## Dependencies
34
+ Tessera needs the following Jekyll plugins to function properly:
35
+
36
+ - jekyll-paginate (Pagination in main page)
37
+ - jekyll-archives (See posts matching category)
38
+
39
+
40
+ ## Post-install setup
41
+ ### Search
42
+ Search needs /`search.json`:
43
+
44
+ ```
45
+ ---
46
+ layout: null
47
+ ---
48
+ [
49
+ {% for post in site.posts %}
50
+ {
51
+ "title": "{{ post.title | escape }}",
52
+ "url": "{{ site.baseurl }}{{ post.url }}",
53
+ "date": "{{ post.date | date: "%B %-d, %Y" }}",
54
+ "content": "{{ post.content | strip_html | strip_newlines | escape }}"
55
+ }{% unless forloop.last %},{% endunless %}
56
+ {% endfor %}
57
+ ]
58
+
59
+ ```
60
+
61
+ ### Pagination
62
+ Pagination needs setup on `_config.yml`:
63
+
64
+ ```
65
+ paginate: 9
66
+ paginate_path: "/page:num/"
67
+ ```
68
+
69
+ ### Social links
70
+ Like any other Jekyll theme, you need to setup your social links on `_config.yml`:
71
+
72
+ ```
73
+ social_links:
74
+ - name: Twitter
75
+ url: https://twitter.com/yourprofile
76
+ icon: twitter
77
+ - name: GitHub
78
+ url: https://github.com/yourprofile
79
+ icon: github
80
+ - name: LinkedIn
81
+ url: https://linkedin.com/in/yourprofile
82
+ icon: linkedin
83
+ ```
84
+
85
+
86
+ ## Usage
87
+
88
+ To start customizing Tessera, copy any of the `_includes` components you'd like to modify. You’ll probably want to copy most or all of them:
89
+
90
+ * `toppane.html`: Header
91
+ * `leftpane.html`: Left side of the page
92
+ * `postgrid.html`: Post grid of the main page
93
+ * `pagination-controls.html`: Pagination controls for the main page
94
+ * `postcontent.html`: Content of a post
95
+ * `userbox.html`: User box displayed below the post content
96
+ * `comments.html`: Optional (currently unimplemented) comments section; by default, an example using Utterances is commented out. You can integrate any custom comment system via JavaScript.
97
+ * `rightpane.html`: Right side of the page
98
+ * `searchbar.html`: Search bar (requires JavaScript)
99
+ * `bottompane.html`: Footer for all pages
100
+
101
+ ## Contributing
102
+
103
+ Bug reports and pull requests are welcome on GitHub at [https://github.com/itszariep/tessera](https://github.com/itszariep/tessera). This project aims to be a safe and welcoming space for collaboration. All contributors are expected to adhere to the [Contributor Covenant](https://www.contributor-covenant.org/) code of conduct.
104
+
105
+ ## Development
106
+
107
+ To set up your environment for theme development, run:
108
+
109
+ ```
110
+ $ bundle install
111
+ ```
112
+
113
+ Your theme is set up just like a regular Jekyll site! To test it, run:
114
+
115
+ ```
116
+ $ bundle exec jekyll serve
117
+ ```
118
+
119
+ Then open your browser at [http://localhost:4000](http://localhost:4000). This starts a Jekyll server using your theme. Add pages, documents, data, etc., as usual to test your theme's content. As you modify the theme or its content, your site will automatically regenerate. Refresh the browser to see the changes.
120
+
121
+ When your theme is released, only the files in `_layouts`, `_includes`, `_sass`, and `assets` that are tracked by Git will be bundled.
122
+ To add a custom directory to your theme gem, update the regular expression in `tessera.gemspec` accordingly.
123
+
124
+ ## License
125
+
126
+ This theme is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/_config.yml ADDED
@@ -0,0 +1,10 @@
1
+ plugins:
2
+ - jekyll-paginate
3
+ - jekyll-archives
4
+
5
+ jekyll-archives:
6
+ enabled:
7
+ - categories
8
+ layout: archive
9
+ permalinks:
10
+ category: '/categories/:name/'
@@ -0,0 +1,12 @@
1
+ <!-- Bottom Pane (Footer?) -->
2
+
3
+ <!-- You can remove or replace any section if required, copying _includes/bottompane.html on your page -->
4
+
5
+ <div class="bottompane">
6
+ <div class="bp-left">
7
+ <p>&copy; {{ site.time | date: '%Y' }} {{ site.title }}</p>
8
+ </div>
9
+ <div class="bp-right">
10
+ <p>&copy; Powered by <a href="https://github.com/itszariep/tessera">Tessera</a> for Jekyll</p>
11
+ </div>
12
+ </div>
@@ -0,0 +1,25 @@
1
+ <!-- Example comment system with utterances
2
+ remove comment to enable it
3
+ See https://utteranc.es for more information about this example
4
+ -->
5
+
6
+ {% comment %}
7
+
8
+ <script src="https://utteranc.es/client.js"
9
+ repo="username/repository"
10
+ issue-term="pathname"
11
+ theme="preferred-color-scheme"
12
+ crossorigin="anonymous"
13
+ async>
14
+ </script>
15
+
16
+ {% endcomment %}
17
+
18
+ <!--Remove this after enabling comments-->
19
+ <div class="userbox">
20
+ <div class="userbox-content">
21
+ <h1>Comment section will be here</h1>
22
+ <h3>See _includes/comments.html</h3>
23
+ </div>
24
+ </div>
25
+ <br>
@@ -0,0 +1,64 @@
1
+ <!-- Left Pane, this is a copy of rightpane because is not used on example
2
+ remove comment if you need it-->
3
+
4
+ <div id="left-container">
5
+
6
+ <div class="leftpane-landscapescreen">
7
+ <h3>Optional leftpane</h3>
8
+ <img class="userpic" src="{{ '/assets/img/avatar.webp' | relative_url }}" alt="Avatar">
9
+ </div>
10
+
11
+ <div class="leftpane-portraitscreen">
12
+ {% include searchbar.html %}
13
+ </div>
14
+
15
+ {% comment %}
16
+ <!-- You can remove or replace any section if required, copying _includes/rightpane.html on your page -->
17
+
18
+ <!-- Banner Image or title-->
19
+ <!-- This image is displayed at the top of the right pane. -->
20
+ <!--<img class="rp-banner" src="{{ '/assets/img/banner.svg' | relative_url }}" width="100%" />-->
21
+ <h1 class="rp-banner">{{ site.title }}</h1>
22
+
23
+ <!-- Search Form -->
24
+ <!-- A simple GET form that allows users to perform a search query. -->
25
+ <!-- The search input is sent to the '/search' route. -->
26
+ <form action="/search" method="GET">
27
+ <input type="search" name="query" placeholder="Search..."> <!-- Search input field -->
28
+ <button type="submit">Search</button> <!-- Submit button -->
29
+ </form>
30
+
31
+ <!-- Entries Section -->
32
+ <!-- Displays a list of recent blog posts. -->
33
+ <h2>Entries</h2>
34
+ <ul>
35
+ <!-- Loop through the latest 5 posts in the site. -->
36
+ {% for post in site.posts limit:5 %}
37
+ <li>
38
+ <!-- Each post is linked to its full page. -->
39
+ <a class="rp-post-link" href="{{ post.url }}">
40
+ <!-- Post title is shown here with a small heading. -->
41
+ <h6 class="rp-post-title">{{ post.title }}</h6>
42
+ </a>
43
+ </li>
44
+ {% endfor %}
45
+ </ul>
46
+
47
+ <!-- Categories Section -->
48
+ <!-- Lists all categories used across posts, sorted alphabetically. -->
49
+ <h2>Categories</h2>
50
+ <ul>
51
+ <!-- Get and sort all categories from the site. -->
52
+ {% assign all_categories = site.categories | sort %}
53
+ {% for category in all_categories %}
54
+ <li>
55
+ <!-- Link to the category page, with a slugified version of the category name. -->
56
+ <a class="rp-post-link" href="{{ site.baseurl }}/categories/{{ category[0] | slugify }}/">
57
+ <!-- Display the name of the category with a medium heading. -->
58
+ <h4 class="rp-post-title">{{ category[0] }}</h4>
59
+ </a>
60
+ </li>
61
+ {% endfor %}
62
+ </ul>
63
+ {% endcomment %}
64
+ </div>
@@ -0,0 +1,26 @@
1
+ <div class="pagination-controls">
2
+ {% if paginator.page > 1 %}
3
+ <a href="{{ '/' | relative_url }}">1</a>
4
+ <a href="{{ paginator.previous_page_path | relative_url }}">&laquo;</a>
5
+ {% endif %}
6
+
7
+ {% assign start_page = paginator.page | minus: 3 %}
8
+ {% if start_page < 1 %}{% assign start_page = 2 %}{% endif %}
9
+
10
+ {% assign end_page = paginator.page | plus: 3 %}
11
+ {% if end_page > paginator.total_pages %}{% assign end_page = paginator.total_pages %}{% endif %}
12
+
13
+ {% for page in (start_page..end_page) %}
14
+ {% if page == paginator.page %}
15
+ <span class="current-page">{{ page }}</span>
16
+ {% else %}
17
+ <a href="{{ site.paginate_path | relative_url | replace: ':num', page }}">{{ page }}</a>
18
+ {% endif %}
19
+ {% endfor %}
20
+
21
+ {% if paginator.page < paginator.total_pages %}
22
+ <a href="{{ paginator.next_page_path | relative_url }}">&raquo;</a>
23
+ <a href="{{ paginator.last_page_path | relative_url }}">{{ paginator.total_pages }}</a>
24
+ {% endif %}
25
+ </div>
26
+ <br><br>
@@ -0,0 +1,35 @@
1
+ <!-- Tags -->
2
+ <div class="post">
3
+
4
+ <div class="post-postcategories">
5
+ <h3>
6
+ {% for category in page.categories %}
7
+ <a href="/categories/{{ category | downcase | url_encode }}/">{{ category }}</a>{% unless forloop.last %} | {% endunless %}
8
+ {% endfor %}
9
+ </h3>
10
+ </div>
11
+
12
+ <div class="post-posttitle">
13
+ <h1>{{ page.title }}</h1>
14
+ </div>
15
+
16
+ <div class="post-postdate">
17
+ <h3>{{ page.date | date: "%y/%m/%d" }}</h3>
18
+ </div>
19
+
20
+ <div class="post-postcontent">
21
+ {{ content }}
22
+ </div>
23
+
24
+ <div class="post-postcategoriesbottom">
25
+ <h3>
26
+ {% for category in page.categories %}
27
+ <a href="/categories/{{ category | downcase | url_encode }}/">{{ category }}</a>{% unless forloop.last %} | {% endunless %}
28
+ {% endfor %}
29
+ </h3>
30
+ </div>
31
+
32
+ <hr class="endseparator">
33
+ {% include userbox.html %}
34
+ {% include comments.html %}
35
+ </div>
@@ -0,0 +1,30 @@
1
+ <!-- Post grid, it includes the logic of displaying post on main.
2
+ Edit your _config.yml to configure entries per page, example:
3
+ paginate: 9
4
+ paginate_path: "/page:num/"
5
+ -->
6
+
7
+ <div id="posts-container">
8
+ <!-- If you don't want to use pagination
9
+ replace paginator.posts with site.posts
10
+ -->
11
+ {% for post in paginator.posts %}
12
+ <a href="{{ post.url | relative_url }}" class="post-link">
13
+ <article class="post-card">
14
+ <div class="post-image-wrapper">
15
+ {% if post.image %}
16
+ <img src="{{ post.image }}" alt="{{ post.title }}" class="post-image" />
17
+ {% endif %}
18
+ </div>
19
+ <div class="post-info">
20
+ <h3 class="post-labels">{{ post.categories | join: ' | ' }}</h3>
21
+ <h2 class="post-title">{{ post.title }}</h2>
22
+ <div class="post-date">{{ post.date | date: "%y/%m/%d" }}</div>
23
+ </div>
24
+ </article>
25
+ </a>
26
+ {% endfor %}
27
+
28
+ <!-- pagination controls, see-->
29
+ {% include pagination-controls.html %}
30
+ </div>
@@ -0,0 +1,48 @@
1
+ <!-- Right Pane -->
2
+
3
+ <!-- You can remove or replace any section if required, copying _includes/rightpane.html on your page -->
4
+
5
+ <div id="right-container">
6
+
7
+ <!-- Banner Image or title-->
8
+ <!-- This image is displayed at the top of the right pane. -->
9
+ <!--<img class="rp-banner" src="{{ '/assets/img/banner.svg' | relative_url }}" width="100%" />-->
10
+ <h1 class="rp-banner">{{ site.title }}</h1>
11
+
12
+ <!-- Search Form -->
13
+ <!-- A simple GET form that allows users to perform a search query. -->
14
+ <!-- The search input is sent to the '/search' route. -->
15
+ {% include searchbar.html %}
16
+ <!-- Entries Section -->
17
+ <!-- Displays a list of recent blog posts. -->
18
+ <h2>Entries</h2>
19
+ <ul>
20
+ <!-- Loop through the latest 5 posts in the site. -->
21
+ {% for post in site.posts limit:5 %}
22
+ <li>
23
+ <!-- Each post is linked to its full page. -->
24
+ <a class="rp-post-link" href="{{ post.url }}">
25
+ <!-- Post title is shown here with a small heading. -->
26
+ <h6 class="rp-post-title">{{ post.title }}</h6>
27
+ </a>
28
+ </li>
29
+ {% endfor %}
30
+ </ul>
31
+
32
+ <!-- Categories Section -->
33
+ <!-- Lists all categories used across posts, sorted alphabetically. -->
34
+ <h2>Categories</h2>
35
+ <ul>
36
+ <!-- Get and sort all categories from the site. -->
37
+ {% assign all_categories = site.categories | sort %}
38
+ {% for category in all_categories %}
39
+ <li>
40
+ <!-- Link to the category page, with a slugified version of the category name. -->
41
+ <a class="rp-post-link" href="{{ site.baseurl }}/categories/{{ category[0] | slugify }}/">
42
+ <!-- Display the name of the category with a medium heading. -->
43
+ <h4 class="rp-post-title">{{ category[0] }}</h4>
44
+ </a>
45
+ </li>
46
+ {% endfor %}
47
+ </ul>
48
+ </div>
@@ -0,0 +1,7 @@
1
+ <div class="search-box">
2
+ <input type="text" class="search-input" placeholder="Search...">
3
+ <ul class="search-results"></ul>
4
+ </div>
5
+
6
+
7
+ <script src="{{ '/assets/js/search.js' | relative_url }}"></script>
@@ -0,0 +1,52 @@
1
+ <!-- Top Pane (Navbar?) -->
2
+
3
+ <div class="toppanel">
4
+ <!-- Left side of the pane, usually only has a title or logo -->
5
+ <div class="tp-left">
6
+ <img class="tp-banner" src="{{ '/assets/img/banner.svg' | relative_url }}" width="100%" />
7
+ <!--<h1>{{ site.title }}</h1> -->
8
+ </div>
9
+
10
+ <!-- Burger menu using checkbox hack (for mobile, without using JS) -->
11
+ <input type="checkbox" id="burger-toggle" class="burger-checkbox">
12
+ <label for="burger-toggle" class="burger-menu">
13
+ <span></span>
14
+ <span></span>
15
+ <span></span>
16
+ </label>
17
+
18
+ <!-- Right side of the pane, usually has the navigation buttons, this example also has sub-elements -->
19
+ <div class="tp-right" id="mobile-menu">
20
+ <ul class="tp-nav">
21
+ <li><a href="{{ '/' | relative_url }}">Home</a></li>
22
+ <li><a href="{{ '/about/' | relative_url }}">About</a></li>
23
+ <li class="tp-dropdown">
24
+ <input type="checkbox" id="social-toggle" class="dropdown-checkbox">
25
+ <label for="social-toggle">Social Media</label>
26
+ <!-- Lists all site social links, declare it on your _config.yml
27
+ example:
28
+ social_links:
29
+ - name: Youtube
30
+ url: https://youtube.com/@zariep
31
+ icon: youtube
32
+ - name: GitHub
33
+ url: https://github.com/ItsZariep
34
+ icon: github
35
+ - name: LinkedIn
36
+ url: https://linkedin.com/in/zariep
37
+ icon: linkedin
38
+ -->
39
+ <ul class="tp-dropdown-elements">
40
+ {% for link in site.social_links %}
41
+ <li>
42
+ <a href="{{ link.url }}" target="_blank" aria-label="{{ link.name }}">
43
+ {{ link.name }}
44
+ </a>
45
+ </li>
46
+ {% endfor %}
47
+ </ul>
48
+ </li>
49
+ <li><a href="{{ 'https://github.com/itszariep/tessera' }}">Download</a></li>
50
+ </ul>
51
+ </div>
52
+ </div>
@@ -0,0 +1,11 @@
1
+ <!--Your personal box at the end of each post-->
2
+
3
+ <div class="userbox">
4
+ <img class="userpic" src="{{ '/assets/img/avatar.webp' | relative_url }}" alt="Avatar">
5
+ <div class="userbox-content">
6
+ <h1>ItsZariep</h1>
7
+ <h3>Cool Description</h3>
8
+ <a href="{{ '/about/' | relative_url }}">About me</a>
9
+ </div>
10
+ </div>
11
+ <br>
@@ -0,0 +1,29 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ <h1>Categories: {{ page.title }}</h1>
6
+
7
+ <div id="main-container">
8
+ {% include leftpane.html %}
9
+ <div id="posts-container">
10
+ {% for post in page.posts %}
11
+ <a href="{{ post.url | relative_url }}" class="post-link">
12
+ <article class="post-card">
13
+ <div class="post-image-wrapper">
14
+ {% if post.image %}
15
+ <img src="{{ post.image }}" alt="{{ post.title }}" class="post-image" />
16
+ {% endif %}
17
+ </div>
18
+ <div class="post-info">
19
+ <h3 class="post-labels">{{ post.categories | join: ' | ' }}</h3>
20
+ <h2 class="post-title">{{ post.title }}</h2>
21
+ <div class="post-date">{{ post.date | date: "%y/%m/%d" }}</div>
22
+ </div>
23
+ </article>
24
+ </a>
25
+ {% endfor %}
26
+ </div>
27
+
28
+ {% include rightpane.html %}
29
+ </div>
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>{{ page.title | default: site.title }}</title>
7
+ <link rel="stylesheet" href="{{ '/assets/css/style.css' | relative_url }}">
8
+ </head>
9
+ <body>
10
+ {% include toppane.html %}
11
+ <main>
12
+ {{ content }}
13
+ </main>
14
+ {% include bottompane.html %}
15
+ </body>
16
+ </html>
@@ -0,0 +1,10 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ <link rel="stylesheet" href="{{ '/assets/css/style.css' | relative_url }}">
6
+ <div id="main-container">
7
+ {% include leftpane.html %}
8
+ {% include postgrid.html %}
9
+ {% include rightpane.html %}
10
+ </div>
@@ -0,0 +1,5 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ {{ content }}
@@ -0,0 +1,25 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ <!DOCTYPE html>
6
+ <html>
7
+ <head>
8
+ <!-- OG Origin tags for social media share preview -->
9
+ <meta charset="UTF-8">
10
+ <meta property="og:title" content="{{ page.title }}" />
11
+ <meta property="og:image" content="{{ page.image }}" />
12
+ <meta property="og:url" content="{{ site.url }}{{ site.baseurl }}{{ page.url }}" />
13
+ <meta property="og:type" content="website" />
14
+
15
+ <title>{{ page.title }}</title>
16
+ </head>
17
+ <body>
18
+ <div id="main-container">
19
+ {% include leftpane.html %}
20
+ {% include postcontent.html %}
21
+ <!-- User box and comments are included on postcontent.html-->
22
+ {% include rightpane.html %}
23
+ </div>
24
+ </body>
25
+ </html>