├── .gitignore └── html-templates ├── 404.html ├── chat-visible.html ├── chat.js ├── create-post.html ├── docker-nginx.txt ├── fallback-avatar.jpg ├── home-guest.html ├── home-logged-in-no-results.html ├── home-logged-in-results.html ├── live-search.js ├── main.css ├── post.html ├── profile-posts.html ├── profile-users.html ├── search-visible.html ├── spa-profile.js └── vps-nginx.txt /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /html-templates/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |You can always visit the homepage to get a fresh start.
36 |Are you sick of short tweets and impersonal “shared” posts that are reminiscent of the late 90’s email forwards? We believe getting back to actually writing is the key to enjoying the internet again.
41 |Your feed displays the latest posts from the people you follow. If you don’t have any friends to follow that’s okay; you can use the “Search” feature in the top menu bar to find content written by people with similar interests and then follow them.
36 |Sorry, we could not find any results for that search.
` 78 | } 79 | this.hideLoaderIcon() 80 | this.showResultsArea() 81 | } 82 | 83 | showLoaderIcon() { 84 | this.loaderIcon.classList.add("circle-loader--visible") 85 | } 86 | 87 | hideLoaderIcon() { 88 | this.loaderIcon.classList.remove("circle-loader--visible") 89 | } 90 | 91 | showResultsArea() { 92 | this.resultsArea.classList.add("live-search-results--visible") 93 | } 94 | 95 | hideResultsArea() { 96 | this.resultsArea.classList.remove("live-search-results--visible") 97 | } 98 | 99 | openOverlay() { 100 | this.overlay.classList.add("search-overlay--visible") 101 | setTimeout(() => this.inputField.focus(), 50) 102 | } 103 | 104 | closeOverlay() { 105 | this.overlay.classList.remove("search-overlay--visible") 106 | } 107 | 108 | injectHTML() { 109 | document.body.insertAdjacentHTML( 110 | "beforeend", 111 | ` ` 127 | ) 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /html-templates/main.css: -------------------------------------------------------------------------------- 1 | body, 2 | .tooltip { 3 | font-family: "Source Sans Pro", sans-serif; 4 | -webkit-font-smoothing: antialiased !important; 5 | -moz-osx-font-smoothing: grayscale !important; 6 | } 7 | 8 | .header-bar { 9 | background-color: #f9322c; 10 | } 11 | 12 | .container--narrow { 13 | max-width: 732px; 14 | } 15 | 16 | .header-search-icon { 17 | position: relative; 18 | top: 3px; 19 | } 20 | 21 | .header-chat-icon { 22 | cursor: pointer; 23 | position: relative; 24 | top: 3px; 25 | } 26 | 27 | .avatar-small { 28 | width: 32px; 29 | height: 32px; 30 | border-radius: 16px; 31 | margin-right: 5px; 32 | position: relative; 33 | top: -3px; 34 | } 35 | 36 | .avatar-tiny { 37 | width: 24px; 38 | height: 24px; 39 | border-radius: 12px; 40 | margin-right: 4px; 41 | position: relative; 42 | top: -1px; 43 | } 44 | 45 | .form-control-title { 46 | font-size: 2rem; 47 | font-weight: 500; 48 | } 49 | 50 | .body-content { 51 | font-size: 1.2rem; 52 | line-height: 1.75; 53 | color: #292929; 54 | } 55 | 56 | .body-content p, 57 | .body-content ul, 58 | .body-content ol { 59 | margin-bottom: 1.75rem; 60 | } 61 | 62 | /* .input-dark { 63 | background-color: #444; 64 | border-color: transparent; 65 | color: #ffffff; 66 | } 67 | 68 | .input-dark:focus { 69 | color: #ffffff; 70 | background-color: #555; 71 | border-color: #80bdff; 72 | outline: 0; 73 | box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); 74 | } 75 | 76 | .input-dark::-webkit-input-placeholder { 77 | color: #888; 78 | } 79 | .input-dark::-moz-placeholder { 80 | color: #888; 81 | } 82 | .input-dark:-ms-input-placeholder { 83 | color: #888; 84 | } 85 | .input-dark:-moz-placeholder { 86 | color: #888; 87 | } */ 88 | 89 | @media (min-width: 768px) { 90 | .input-dark { 91 | width: auto; 92 | } 93 | } 94 | 95 | .display-3 { 96 | font-size: 4.35rem; 97 | } 98 | 99 | @media (max-width: 768px) { 100 | .display-3 { 101 | font-size: 2.5rem; 102 | } 103 | } 104 | 105 | .form-group { 106 | position: relative; 107 | } 108 | 109 | .liveValidateMessage { 110 | transition: all 0.5s ease-out; 111 | top: -6px; 112 | position: absolute; 113 | z-index: 1; 114 | padding-top: 6px; 115 | padding-bottom: 16px; 116 | opacity: 0; 117 | transform: translateY(100%); 118 | } 119 | 120 | .liveValidateMessage--visible { 121 | opacity: 1; 122 | transform: translateY(0); 123 | } 124 | 125 | .form-group input, 126 | .form-group textarea { 127 | position: relative; 128 | z-index: 2; 129 | } 130 | 131 | textarea.tall-textarea { 132 | height: 160px; 133 | } 134 | 135 | @media (min-width: 768px) { 136 | textarea.tall-textarea { 137 | height: 320px; 138 | } 139 | } 140 | 141 | .delete-post-button { 142 | cursor: pointer; 143 | background: none; 144 | border: none; 145 | padding: 0; 146 | margin: 0; 147 | } 148 | 149 | /* Search Overaly */ 150 | .search-overlay { 151 | display: flex; 152 | flex-direction: column; 153 | position: fixed; 154 | z-index: 500; 155 | top: 0; 156 | left: 0; 157 | bottom: 0; 158 | right: 0; 159 | background-color: rgba(215, 215, 215, 0.911); 160 | visibility: hidden; 161 | opacity: 0; 162 | transform: scale(1.3); 163 | transition: 0.33s visibility ease-in-out, 0.33s opacity ease-in-out, 0.33s transform ease-in-out; 164 | will-change: visibility, transform, opacity; 165 | } 166 | 167 | .search-overlay--visible { 168 | visibility: visible; 169 | opacity: 1; 170 | transform: scale(1); 171 | } 172 | 173 | .search-overlay-icon { 174 | color: #007bff; 175 | font-size: 1.4rem; 176 | margin: 0; 177 | margin-right: 10px; 178 | } 179 | 180 | .live-search-field { 181 | background-color: transparent; 182 | border: none; 183 | font-size: 1.1rem; 184 | outline: none; 185 | flex: 1; 186 | color: #007bff; 187 | } 188 | 189 | .live-search-results { 190 | opacity: 0; 191 | transition: all 0.3s ease-out; 192 | transform: scale(1.07); 193 | } 194 | 195 | .live-search-results--visible { 196 | opacity: 1; 197 | transform: scale(1); 198 | } 199 | 200 | .search-overlay-top { 201 | background-color: #fff; 202 | /* background-color: rgba(0, 0, 0, .79); */ 203 | } 204 | 205 | .search-overlay-top .container { 206 | position: relative; 207 | display: flex; 208 | align-items: center; 209 | padding-top: 15px; 210 | padding-bottom: 15px; 211 | } 212 | 213 | .search-overlay-bottom { 214 | overflow: auto; 215 | } 216 | 217 | .close-live-search { 218 | font-size: 1.5rem; 219 | cursor: pointer; 220 | opacity: 0.75; 221 | line-height: 1; 222 | color: #292929; 223 | } 224 | 225 | @media (min-width: 700px) { 226 | .live-search-field { 227 | font-size: 2.5rem; 228 | } 229 | 230 | .close-live-search { 231 | font-size: 3rem; 232 | } 233 | 234 | .search-overlay-icon { 235 | font-size: 3rem; 236 | } 237 | } 238 | 239 | .close-live-search:hover { 240 | opacity: 1; 241 | } 242 | 243 | @-webkit-keyframes spin { 244 | 100% { 245 | -webkit-transform: rotate(360deg); 246 | transform: rotate(360deg); 247 | } 248 | } 249 | @keyframes spin { 250 | 100% { 251 | -webkit-transform: rotate(360deg); 252 | transform: rotate(360deg); 253 | } 254 | } 255 | 256 | .circle-loader { 257 | opacity: 0; 258 | transition: opacity 0.45s ease-out, visibility 0.45s ease-out; 259 | visibility: hidden; 260 | position: absolute; 261 | left: 50%; 262 | box-sizing: border-box; 263 | width: 65px; 264 | height: 65px; 265 | border-radius: 100%; 266 | border: 10px solid rgba(73, 80, 87, 0.2); 267 | border-top-color: #495057; 268 | will-change: -webkit-transform, transform; 269 | -webkit-transform: rotate(0deg); 270 | transform: rotate(0deg); 271 | -webkit-animation: spin 1s infinite linear; 272 | animation: spin 1s infinite linear; 273 | } 274 | 275 | .circle-loader--visible { 276 | visibility: visible; 277 | opacity: 1; 278 | } 279 | 280 | /* End Search Overlay */ 281 | 282 | /* Chat */ 283 | .chat-wrapper { 284 | position: fixed; 285 | z-index: 5; 286 | bottom: 0; 287 | right: 20px; 288 | width: 290px; 289 | height: 350px; 290 | background-color: #fff; 291 | display: flex; 292 | flex-direction: column; 293 | opacity: 0; 294 | transform: translateY(100%); 295 | } 296 | 297 | .chat-wrapper--ready { 298 | transition: all 0.4s ease-in-out; 299 | } 300 | 301 | .chat--visible { 302 | opacity: 1; 303 | transform: translateY(0); 304 | } 305 | 306 | .chat-title-bar { 307 | background-color: #292929; 308 | color: #fff; 309 | padding: 4px 7px; 310 | display: flex; 311 | justify-content: space-between; 312 | } 313 | 314 | .chat-title-bar-close { 315 | opacity: 0.7; 316 | cursor: pointer; 317 | } 318 | 319 | .chat-title-bar-close:hover { 320 | opacity: 1; 321 | } 322 | 323 | .chat-log { 324 | padding: 8px; 325 | flex: 1; 326 | overflow: auto; 327 | } 328 | 329 | .chat-self, 330 | .chat-other { 331 | font-size: 0.75rem; 332 | display: flex; 333 | align-items: center; 334 | margin-bottom: 7px; 335 | } 336 | 337 | .chat-self { 338 | padding-left: 25%; 339 | } 340 | 341 | .chat-self .chat-avatar { 342 | margin-left: 6px; 343 | } 344 | 345 | .chat-self .chat-message { 346 | flex: 1; 347 | display: flex; 348 | justify-content: flex-end; 349 | } 350 | 351 | .chat-self .chat-message-inner { 352 | text-align: right; 353 | padding: 4px 7px; 354 | border-radius: 12px; 355 | background-color: #007bff; 356 | color: #fff; 357 | } 358 | 359 | .chat-other { 360 | padding-right: 25%; 361 | } 362 | 363 | .chat-other .chat-avatar { 364 | margin-right: 6px; 365 | } 366 | 367 | .chat-other .chat-message { 368 | flex: 1; 369 | display: flex; 370 | justify-content: flex-start; 371 | } 372 | 373 | .chat-other .chat-message-inner { 374 | padding: 4px 7px; 375 | border-radius: 12px; 376 | background-color: #f1f0f0; 377 | } 378 | 379 | .chat-message a { 380 | color: #212529; 381 | } 382 | 383 | .chat-field { 384 | width: 100%; 385 | box-sizing: border-box; 386 | padding: 10px 7px; 387 | border: none; 388 | outline: none; 389 | font-size: 0.75rem; 390 | } 391 | 392 | header .flex-row > div { 393 | display: inline; 394 | } 395 | 396 | header .flex-row > div > div { 397 | display: inline; 398 | } 399 | -------------------------------------------------------------------------------- /html-templates/post.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
44 |
45 | Posted by kittydoe on 2/3/2019
46 |
My roommate yells at me when I destroy things, but I do what I want.
50 |Lorem ipsum dolor sit amet, consectetur adipisicing elit. Numquam praesentium laboriosam unde fuga accusamus reiciendis laudantium quis consequatur, beatae temporibus nemo, tempora voluptatum, perspiciatis accusantium ullam molestiae cupiditate incidunt architecto.
51 |Lorem ipsum dolor sit amet, consectetur adipisicing elit. Numquam praesentium laboriosam unde fuga accusamus reiciendis laudantium quis consequatur, beatae temporibus nemo, tempora voluptatum, perspiciatis accusantium ullam molestiae cupiditate incidunt architecto.
52 |