├── .datignore ├── .gitignore ├── assets ├── Lars-Mono.eot ├── Lars-Mono.otf ├── Lars-Mono.woff └── Lars-Mono.woff2 ├── content ├── 01-p2p-cms.json ├── 02-walk.json └── 03-hang.json ├── index.html ├── package.json ├── readme.md └── src ├── components ├── channel.js ├── chat.js ├── walk.js └── wrapper.js ├── design.js ├── index.js ├── lib └── ws.js ├── stores ├── app.js └── chat.js └── views ├── break.js ├── chat.js ├── hang.js ├── main.js ├── scratch-editor.js └── walk.js /.datignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .dat 3 | node_modules 4 | bundles 5 | dat.json 6 | dist -------------------------------------------------------------------------------- /assets/Lars-Mono.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jondashkyle/live/672dc80e7455d26bc9770c0e36611512d7242718/assets/Lars-Mono.eot -------------------------------------------------------------------------------- /assets/Lars-Mono.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jondashkyle/live/672dc80e7455d26bc9770c0e36611512d7242718/assets/Lars-Mono.otf -------------------------------------------------------------------------------- /assets/Lars-Mono.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jondashkyle/live/672dc80e7455d26bc9770c0e36611512d7242718/assets/Lars-Mono.woff -------------------------------------------------------------------------------- /assets/Lars-Mono.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jondashkyle/live/672dc80e7455d26bc9770c0e36611512d7242718/assets/Lars-Mono.woff2 -------------------------------------------------------------------------------- /content/01-p2p-cms.json: -------------------------------------------------------------------------------- 1 | { 2 | "messages": [ 3 | { 4 | "name": "nice", 5 | "message": "hello world", 6 | "timestamp": "2017-10-17T21:55:17.987Z" 7 | }, 8 | { 9 | "name": "nice", 10 | "message": "hello kyle", 11 | "timestamp": "2017-10-18T17:57:37.742Z" 12 | }, 13 | { 14 | "name": "nice", 15 | "message": "hello", 16 | "timestamp": "2017-10-18T18:00:47.889Z" 17 | }, 18 | { 19 | "name": "nice", 20 | "message": "oi oi", 21 | "timestamp": "2017-10-18T18:05:51.844Z" 22 | }, 23 | { 24 | "name": "nice", 25 | "message": "we almost here", 26 | "timestamp": "2017-10-18T18:06:18.379Z" 27 | }, 28 | { 29 | "name": "nice", 30 | "message": ":D", 31 | "timestamp": "2017-10-18T18:06:29.171Z" 32 | }, 33 | { 34 | "name": "nice", 35 | "message": "yow", 36 | "timestamp": "2017-10-18T18:07:10.802Z" 37 | }, 38 | { 39 | "name": "nice", 40 | "message": "ayyy", 41 | "timestamp": "2017-10-18T18:07:15.008Z" 42 | }, 43 | { 44 | "name": "nice", 45 | "message": "yea", 46 | "timestamp": "2017-10-18T18:07:24.683Z" 47 | }, 48 | { 49 | "name": "nice", 50 | "message": "im jimmy excited for this", 51 | "timestamp": "2017-10-18T18:07:27.846Z" 52 | }, 53 | { 54 | "name": "nice", 55 | "message": "audios a lil distorted", 56 | "timestamp": "2017-10-18T18:07:37.056Z" 57 | }, 58 | { 59 | "name": "nice", 60 | "message": "was hoping this page was beaker-forkable... not yet", 61 | "timestamp": "2017-10-18T18:07:40.839Z" 62 | }, 63 | { 64 | "name": "nice", 65 | "message": "decent", 66 | "timestamp": "2017-10-18T18:07:52.825Z" 67 | }, 68 | { 69 | "name": "nice", 70 | "message": "still watching this xbox commercial lol", 71 | "timestamp": "2017-10-18T18:07:56.832Z" 72 | }, 73 | { 74 | "name": "nice", 75 | "message": "Yes", 76 | "timestamp": "2017-10-18T18:08:03.518Z" 77 | }, 78 | { 79 | "name": "nice", 80 | "message": "musics cool", 81 | "timestamp": "2017-10-18T18:08:06.552Z" 82 | }, 83 | { 84 | "name": "nice", 85 | "message": "whats gooood", 86 | "timestamp": "2017-10-18T18:08:09.081Z" 87 | }, 88 | { 89 | "name": "nice", 90 | "message": "bit crunchy", 91 | "timestamp": "2017-10-18T18:08:12.920Z" 92 | }, 93 | { 94 | "name": "nice", 95 | "message": "bit crackly", 96 | "timestamp": "2017-10-18T18:08:13.699Z" 97 | }, 98 | { 99 | "name": "nice", 100 | "message": "cant hear that", 101 | "timestamp": "2017-10-18T18:08:27.959Z" 102 | }, 103 | { 104 | "name": "nice", 105 | "message": "your audio keeps distorting though", 106 | "timestamp": "2017-10-18T18:08:29.360Z" 107 | }, 108 | { 109 | "name": "nice", 110 | "message": "i cant here any", 111 | "timestamp": "2017-10-18T18:08:29.978Z" 112 | }, 113 | { 114 | "name": "nice", 115 | "message": "^_^", 116 | "timestamp": "2017-10-18T18:08:39.057Z" 117 | }, 118 | { 119 | "name": "nice", 120 | "message": "yeah its nice", 121 | "timestamp": "2017-10-18T18:08:43.642Z" 122 | }, 123 | { 124 | "name": "nice", 125 | "message": "thats p good", 126 | "timestamp": "2017-10-18T18:08:46.424Z" 127 | }, 128 | { 129 | "name": "nice", 130 | "message": "oh sounds good now", 131 | "timestamp": "2017-10-18T18:08:48.793Z" 132 | }, 133 | { 134 | "name": "nice", 135 | "message": "chill", 136 | "timestamp": "2017-10-18T18:08:49.893Z" 137 | }, 138 | { 139 | "name": "nice", 140 | "message": "you're still a bit distorted", 141 | "timestamp": "2017-10-18T18:09:00.447Z" 142 | }, 143 | { 144 | "name": "nice", 145 | "message": "what's up from Portland", 146 | "timestamp": "2017-10-18T18:09:07.896Z" 147 | }, 148 | { 149 | "name": "nice", 150 | "message": "hot", 151 | "timestamp": "2017-10-18T18:09:13.380Z" 152 | }, 153 | { 154 | "name": "nice", 155 | "message": "never", 156 | "timestamp": "2017-10-18T18:09:55.685Z" 157 | }, 158 | { 159 | "name": "nice", 160 | "message": "watching from @instrument", 161 | "timestamp": "2017-10-18T18:09:58.141Z" 162 | }, 163 | { 164 | "name": "nice", 165 | "message": "sounds fine m8 just a bit crunchy", 166 | "timestamp": "2017-10-18T18:10:09.341Z" 167 | }, 168 | { 169 | "name": "nice", 170 | "message": "lol", 171 | "timestamp": "2017-10-18T18:10:24.306Z" 172 | }, 173 | { 174 | "name": "nice", 175 | "message": "hello from london", 176 | "timestamp": "2017-10-18T18:10:32.835Z" 177 | }, 178 | { 179 | "name": "nice", 180 | "message": "not possible", 181 | "timestamp": "2017-10-18T18:10:35.207Z" 182 | }, 183 | { 184 | "name": "nice", 185 | "message": "whats ur sublime theme/colours", 186 | "timestamp": "2017-10-18T18:10:53.407Z" 187 | }, 188 | { 189 | "name": "nice", 190 | "message": "you could turn the mic like way down tbh", 191 | "timestamp": "2017-10-18T18:11:17.005Z" 192 | }, 193 | { 194 | "name": "nice", 195 | "message": "or just low talk hehe", 196 | "timestamp": "2017-10-18T18:11:26.711Z" 197 | }, 198 | { 199 | "name": "nice", 200 | "message": "omg whisper", 201 | "timestamp": "2017-10-18T18:11:29.612Z" 202 | }, 203 | { 204 | "name": "nice", 205 | "message": "there we go", 206 | "timestamp": "2017-10-18T18:11:45.985Z" 207 | }, 208 | { 209 | "name": "nice", 210 | "message": "way better yea", 211 | "timestamp": "2017-10-18T18:11:49.762Z" 212 | }, 213 | { 214 | "name": "nice", 215 | "message": "thats good ", 216 | "timestamp": "2017-10-18T18:11:48.791Z" 217 | }, 218 | { 219 | "name": "nice", 220 | "message": "yes!!", 221 | "timestamp": "2017-10-18T18:11:50.820Z" 222 | }, 223 | { 224 | "name": "nice", 225 | "message": "bettter!", 226 | "timestamp": "2017-10-18T18:11:55.430Z" 227 | }, 228 | { 229 | "name": "nice", 230 | "message": "maybe music just a tad lower aswel", 231 | "timestamp": "2017-10-18T18:11:58.583Z" 232 | }, 233 | { 234 | "name": "nice", 235 | "message": "woo!", 236 | "timestamp": "2017-10-18T18:12:08.768Z" 237 | }, 238 | { 239 | "name": "nice", 240 | "message": "perf", 241 | "timestamp": "2017-10-18T18:12:19.863Z" 242 | }, 243 | { 244 | "name": "nice", 245 | "message": "much better", 246 | "timestamp": "2017-10-18T18:12:44.853Z" 247 | }, 248 | { 249 | "name": "nice", 250 | "message": "(Y)", 251 | "timestamp": "2017-10-18T18:12:47.059Z" 252 | }, 253 | { 254 | "name": "nice", 255 | "message": "yeah its hot", 256 | "timestamp": "2017-10-18T18:15:31.670Z" 257 | }, 258 | { 259 | "name": "nice", 260 | "message": "it's lit", 261 | "timestamp": "2017-10-18T18:15:42.044Z" 262 | }, 263 | { 264 | "name": "nice", 265 | "message": "this is awesome.", 266 | "timestamp": "2017-10-18T18:18:36.797Z" 267 | }, 268 | { 269 | "name": "nice", 270 | "message": "nice interface btw.", 271 | "timestamp": "2017-10-18T18:18:44.706Z" 272 | }, 273 | { 274 | "name": "nice", 275 | "message": "^^", 276 | "timestamp": "2017-10-18T18:19:08.574Z" 277 | }, 278 | { 279 | "name": "nice", 280 | "message": "hi", 281 | "timestamp": "2017-10-18T18:20:06.025Z" 282 | }, 283 | { 284 | "name": "nice", 285 | "message": "i guess it's kinda like acf for wordpress", 286 | "timestamp": "2017-10-18T18:20:08.278Z" 287 | }, 288 | { 289 | "name": "nice", 290 | "message": "how do u reference images/files in the text fields in enoki?", 291 | "timestamp": "2017-10-18T18:22:45.549Z" 292 | }, 293 | { 294 | "name": "nice", 295 | "message": "can you drop-in custom textfield?", 296 | "timestamp": "2017-10-18T18:22:52.803Z" 297 | }, 298 | { 299 | "name": "nice", 300 | "message": "muted", 301 | "timestamp": "2017-10-18T18:23:10.050Z" 302 | }, 303 | { 304 | "name": "nice", 305 | "message": "ur muted ", 306 | "timestamp": "2017-10-18T18:23:14.314Z" 307 | }, 308 | { 309 | "name": "nice", 310 | "message": "say i wanna put it a real-time-text editor and working with someone else in real time", 311 | "timestamp": "2017-10-18T18:23:24.761Z" 312 | }, 313 | { 314 | "name": "nice", 315 | "message": "u can turn off the music if u want it's like almost silent", 316 | "timestamp": "2017-10-18T18:27:05.076Z" 317 | }, 318 | { 319 | "name": "nice", 320 | "message": "yea making your own custom fields seems like would be real fun", 321 | "timestamp": "2017-10-18T18:27:48.593Z" 322 | }, 323 | { 324 | "name": "nice", 325 | "message": "I can hear you pretty well", 326 | "timestamp": "2017-10-18T18:28:40.390Z" 327 | }, 328 | { 329 | "name": "nice", 330 | "message": "the construction isnt too bad", 331 | "timestamp": "2017-10-18T18:28:53.160Z" 332 | }, 333 | { 334 | "name": "nice", 335 | "message": "it's not overpowering your voice", 336 | "timestamp": "2017-10-18T18:28:55.100Z" 337 | }, 338 | { 339 | "name": "nice", 340 | "message": "how do u handle code splitting w enoki?", 341 | "timestamp": "2017-10-18T18:28:56.819Z" 342 | }, 343 | { 344 | "name": "nice", 345 | "message": "almost dont quite need wysiwyg since you could have multiple blocks of custom types of contents/fields/etc", 346 | "timestamp": "2017-10-18T18:28:57.141Z" 347 | }, 348 | { 349 | "name": "nice", 350 | "message": "this last thing is already a big difference from kirby", 351 | "timestamp": "2017-10-18T18:29:16.310Z" 352 | }, 353 | { 354 | "name": "nice", 355 | "message": "yea definitely, you want them to control the data, but you want to control the styling/presentation", 356 | "timestamp": "2017-10-18T18:29:41.401Z" 357 | }, 358 | { 359 | "name": "nice", 360 | "message": "is there any way to create sections for markdown files? eg. Text, Image, then a secondary text field: almost like ACF", 361 | "timestamp": "2017-10-18T18:29:51.329Z" 362 | }, 363 | { 364 | "name": "nice", 365 | "message": "would u consider going full wysiwyg but in the form of like dropbox papers markdown editor, or mediums editor?", 366 | "timestamp": "2017-10-18T18:30:13.475Z" 367 | }, 368 | { 369 | "name": "nice", 370 | "message": "that's kind of what this is already", 371 | "timestamp": "2017-10-18T18:30:27.355Z" 372 | }, 373 | { 374 | "name": "nice", 375 | "message": "so really possible to turn it into a wiki (possibly)", 376 | "timestamp": "2017-10-18T18:30:47.469Z" 377 | }, 378 | { 379 | "name": "nice", 380 | "message": "you could have a suuuuuper custom wysiwyg ", 381 | "timestamp": "2017-10-18T18:30:56.606Z" 382 | }, 383 | { 384 | "name": "nice", 385 | "message": "do u think that custom editors feature could work with regular enoki?", 386 | "timestamp": "2017-10-18T18:32:28.306Z" 387 | }, 388 | { 389 | "name": "nice", 390 | "message": "right - like how Linux has opinionated distros (Mint, Debian), Beaker is an opinionated Chromium distro", 391 | "timestamp": "2017-10-18T18:34:39.197Z" 392 | }, 393 | { 394 | "name": "nice", 395 | "message": "oo this is harrd", 396 | "timestamp": "2017-10-18T18:35:06.149Z" 397 | }, 398 | { 399 | "name": "nice", 400 | "message": "(this is paul) Goal is to make a full API stack for p2p and thin (easy to replace) services. We can probably bundle it into a stack that imports into any electron app, which would be good for other browsers and for the Enoki desktop", 401 | "timestamp": "2017-10-18T18:38:02.283Z" 402 | }, 403 | { 404 | "name": "nice", 405 | "message": "so your description was pretty much on point", 406 | "timestamp": "2017-10-18T18:38:21.510Z" 407 | }, 408 | { 409 | "name": "nice", 410 | "message": "can you show us the files behind the site?", 411 | "timestamp": "2017-10-18T18:39:24.477Z" 412 | }, 413 | { 414 | "name": "nice", 415 | "message": "that's how i publish updates on my website too. it's the best flow i've ever used for publishing updates", 416 | "timestamp": "2017-10-18T18:39:54.512Z" 417 | }, 418 | { 419 | "name": "nice", 420 | "message": "hi j-k!", 421 | "timestamp": "2017-10-18T18:40:09.956Z" 422 | }, 423 | { 424 | "name": "nice", 425 | "message": "wow gtfo ", 426 | "timestamp": "2017-10-18T18:42:59.792Z" 427 | }, 428 | { 429 | "name": "nice", 430 | "message": "whaaaat where's the build process?", 431 | "timestamp": "2017-10-18T18:43:06.780Z" 432 | }, 433 | { 434 | "name": "nice", 435 | "message": "(Hi! Just getting in, will be silently following. Thanks for hosting, super happy you're doing this 👌)", 436 | "timestamp": "2017-10-18T18:43:07.568Z" 437 | }, 438 | { 439 | "name": "nice", 440 | "message": "(@thmsbfft here btw)", 441 | "timestamp": "2017-10-18T18:43:21.352Z" 442 | }, 443 | { 444 | "name": "nice", 445 | "message": "could you explain how you get .html pages in beaker w/o a build?", 446 | "timestamp": "2017-10-18T18:46:02.202Z" 447 | }, 448 | { 449 | "name": "nice", 450 | "message": "^ yeah, i have the same question", 451 | "timestamp": "2017-10-18T18:46:18.370Z" 452 | }, 453 | { 454 | "name": "nice", 455 | "message": "this thing on?", 456 | "timestamp": "2017-10-18T18:47:50.166Z" 457 | }, 458 | { 459 | "name": "nice", 460 | "message": "(this is paul) are you using web_root right now or the fallback_page?", 461 | "timestamp": "2017-10-18T18:47:55.136Z" 462 | }, 463 | { 464 | "name": "nice", 465 | "message": "chat isnt working in safari for some reason", 466 | "timestamp": "2017-10-18T18:48:18.492Z" 467 | }, 468 | { 469 | "name": "nice", 470 | "message": "right so the entire frontend is dynamically generated", 471 | "timestamp": "2017-10-18T18:48:37.632Z" 472 | }, 473 | { 474 | "name": "nice", 475 | "message": "yeah could you step through the code that builds the page?", 476 | "timestamp": "2017-10-18T18:49:18.056Z" 477 | }, 478 | { 479 | "name": "nice", 480 | "message": "is the video going to be archived?", 481 | "timestamp": "2017-10-18T18:50:37.608Z" 482 | }, 483 | { 484 | "name": "nice", 485 | "message": "could also wrap with dat fs api to get content from remote dats =)", 486 | "timestamp": "2017-10-18T18:50:52.027Z" 487 | }, 488 | { 489 | "name": "nice", 490 | "message": "EVERYTHING IS A FILE", 491 | "timestamp": "2017-10-18T18:51:19.708Z" 492 | }, 493 | { 494 | "name": "nice", 495 | "message": "im pretty sure twitch archives", 496 | "timestamp": "2017-10-18T18:53:02.934Z" 497 | }, 498 | { 499 | "name": "nice", 500 | "message": "have you seen https://github.com/jayrbolton/dat-pki ?", 501 | "timestamp": "2017-10-18T18:53:05.703Z" 502 | }, 503 | { 504 | "name": "nice", 505 | "message": "lovveee the idea behind gr8, so quick to do f(css) stuff", 506 | "timestamp": "2017-10-18T18:56:18.066Z" 507 | }, 508 | { 509 | "name": "nice", 510 | "message": "i wish someone could explain the idea behind fn(css). i jus dont get it", 511 | "timestamp": "2017-10-18T18:57:03.924Z" 512 | }, 513 | { 514 | "name": "nice", 515 | "message": "patricia :)", 516 | "timestamp": "2017-10-18T19:03:17.568Z" 517 | }, 518 | { 519 | "name": "nice", 520 | "message": "don't feel need to answer now, but have you had any thoughts about drafts & where/how those live?", 521 | "timestamp": "2017-10-18T19:03:59.491Z" 522 | }, 523 | { 524 | "name": "nice", 525 | "message": "like drafting a page or post that are not public yet, able to collab and version", 526 | "timestamp": "2017-10-18T19:04:53.231Z" 527 | }, 528 | { 529 | "name": "nice", 530 | "message": "how come YAML?", 531 | "timestamp": "2017-10-18T19:05:11.562Z" 532 | }, 533 | { 534 | "name": "nice", 535 | "message": "(this is paul) about private files, there's an idea that's being tossed around, where Dats can have a private \"layer.\" It'd be like having 2 folders, one laid on top of the other, and the top folder would be private", 536 | "timestamp": "2017-10-18T19:05:51.610Z" 537 | }, 538 | { 539 | "name": "nice", 540 | "message": "(this is paul) but it's a little complex so we'll see", 541 | "timestamp": "2017-10-18T19:06:14.985Z" 542 | }, 543 | { 544 | "name": "nice", 545 | "message": "interesting. collab seems tough right? since once person is creator of the dat", 546 | "timestamp": "2017-10-18T19:06:21.432Z" 547 | }, 548 | { 549 | "name": "nice", 550 | "message": "(this is paul) about collab, dat will support multiple authors soon", 551 | "timestamp": "2017-10-18T19:06:43.137Z" 552 | }, 553 | { 554 | "name": "nice", 555 | "message": "i cant wait for multiwriter hyperdrive/dat", 556 | "timestamp": "2017-10-18T19:07:12.870Z" 557 | }, 558 | { 559 | "name": "nice", 560 | "message": "mafintoshian hypermodularism", 561 | "timestamp": "2017-10-18T19:07:48.302Z" 562 | }, 563 | { 564 | "name": "nice", 565 | "message": "mafintastic", 566 | "timestamp": "2017-10-18T19:08:03.597Z" 567 | }, 568 | { 569 | "name": "nice", 570 | "message": "damn awesome. other thing im trying to wrap my head around/excites me would be ability to share custom post types or different styled panel.", 571 | "timestamp": "2017-10-18T19:08:17.457Z" 572 | }, 573 | { 574 | "name": "nice", 575 | "message": "ogdonian dattopia ", 576 | "timestamp": "2017-10-18T19:08:37.416Z" 577 | }, 578 | { 579 | "name": "nice", 580 | "message": "sorry if you already explained this — when you `dat sync` are you doing it from your project root, or from some kind of dist/ directory?", 581 | "timestamp": "2017-10-18T19:09:18.925Z" 582 | }, 583 | { 584 | "name": "nice", 585 | "message": "source should be included if you have multiple editors", 586 | "timestamp": "2017-10-18T19:10:37.128Z" 587 | }, 588 | { 589 | "name": "nice", 590 | "message": "isn't that partially the point of source maps? why not just publish source maps along with the code?", 591 | "timestamp": "2017-10-18T19:11:31.954Z" 592 | }, 593 | { 594 | "name": "nice", 595 | "message": "source maps are for debugging", 596 | "timestamp": "2017-10-18T19:11:46.940Z" 597 | }, 598 | { 599 | "name": "nice", 600 | "message": "why not publish all 3?", 601 | "timestamp": "2017-10-18T19:12:02.306Z" 602 | }, 603 | { 604 | "name": "nice", 605 | "message": "less magic", 606 | "timestamp": "2017-10-18T19:12:59.201Z" 607 | }, 608 | { 609 | "name": "nice", 610 | "message": "if your compiler is legible and works reproducibly, source maps just add complexity", 611 | "timestamp": "2017-10-18T19:15:03.141Z" 612 | }, 613 | { 614 | "name": "nice", 615 | "message": "I've been thinking about how to do vanilla-browser dat/beaker site gateways. Rather than an AWS service that serves http like hashbase, ship a webrtc dat client and a static website generator client, that way the content can live behind conventional zero-conf'd networking gear and the static client lives on cheap s3/gh-pages", 616 | "timestamp": "2017-10-18T19:15:14.328Z" 617 | }, 618 | { 619 | "name": "nice", 620 | "message": "thats a very good articulation of node flavored ergonomics", 621 | "timestamp": "2017-10-18T19:15:37.216Z" 622 | }, 623 | { 624 | "name": "nice", 625 | "message": "can you write this down?", 626 | "timestamp": "2017-10-18T19:17:47.505Z" 627 | }, 628 | { 629 | "name": "nice", 630 | "message": "fungible ", 631 | "timestamp": "2017-10-18T19:18:35.874Z" 632 | }, 633 | { 634 | "name": "nice", 635 | "message": "how do you feel about beaker being tied to webkit/google?", 636 | "timestamp": "2017-10-18T19:19:48.105Z" 637 | }, 638 | { 639 | "name": "nice", 640 | "message": "v8 made some serious commitments to node recently, I wonder if webkit will do the same for electron", 641 | "timestamp": "2017-10-18T19:20:30.868Z" 642 | }, 643 | { 644 | "name": "nice", 645 | "message": "video is covering your editor", 646 | "timestamp": "2017-10-18T19:25:05.732Z" 647 | }, 648 | { 649 | "name": "nice", 650 | "message": "Anyone able to access the demo dat site? I'm getting timed out dat://1acd82bec98be42044f8eba740fad709c9e12cbdc76c94d3ea56cbf41289efa3/", 651 | "timestamp": "2017-10-18T19:25:25.166Z" 652 | }, 653 | { 654 | "name": "nice", 655 | "message": "what's this sublime theme?", 656 | "timestamp": "2017-10-18T19:26:04.445Z" 657 | }, 658 | { 659 | "name": "nice", 660 | "message": "yep", 661 | "timestamp": "2017-10-18T19:26:08.791Z" 662 | }, 663 | { 664 | "name": "nice", 665 | "message": "working for me", 666 | "timestamp": "2017-10-18T19:26:37.661Z" 667 | }, 668 | { 669 | "name": "nice", 670 | "message": "which tool you just said?", 671 | "timestamp": "2017-10-18T19:28:20.809Z" 672 | }, 673 | { 674 | "name": "nice", 675 | "message": "ty", 676 | "timestamp": "2017-10-18T19:29:07.463Z" 677 | }, 678 | { 679 | "name": "nice", 680 | "message": "the dat uri works for me", 681 | "timestamp": "2017-10-18T19:32:21.669Z" 682 | }, 683 | { 684 | "name": "nice", 685 | "message": "is there an .enokiignore file?", 686 | "timestamp": "2017-10-18T19:36:34.967Z" 687 | }, 688 | { 689 | "name": "nice", 690 | "message": "chill vibes j-k is that the construction or part of the music", 691 | "timestamp": "2017-10-18T19:36:51.063Z" 692 | }, 693 | { 694 | "name": "nice", 695 | "message": "@thmsbfft oryoki is what i've been needing for a long time! beautiful", 696 | "timestamp": "2017-10-18T19:39:56.730Z" 697 | }, 698 | { 699 | "name": "nice", 700 | "message": "love the float feature", 701 | "timestamp": "2017-10-18T19:40:21.324Z" 702 | }, 703 | { 704 | "name": "nice", 705 | "message": "stepped out for a sec. did you mention how layout build params will be stored if that's configured within the UI?", 706 | "timestamp": "2017-10-18T19:42:54.651Z" 707 | }, 708 | { 709 | "name": "nice", 710 | "message": "(this is sam) we had chatted about doing some layout post-processing for different page \"views\"", 711 | "timestamp": "2017-10-18T19:44:07.107Z" 712 | }, 713 | { 714 | "name": "nice", 715 | "message": "not sure which direction you ended up going", 716 | "timestamp": "2017-10-18T19:44:21.771Z" 717 | }, 718 | { 719 | "name": "nice", 720 | "message": "maybe too early to say", 721 | "timestamp": "2017-10-18T19:44:39.788Z" 722 | }, 723 | { 724 | "name": "nice", 725 | "message": "not vague, answers my Q", 726 | "timestamp": "2017-10-18T19:45:51.176Z" 727 | }, 728 | { 729 | "name": "nice", 730 | "message": "@thmsbfft oryoki is amazing, would you consider adding splitview of some sorts?", 731 | "timestamp": "2017-10-18T19:51:03.980Z" 732 | }, 733 | { 734 | "name": "nice", 735 | "message": "is it safe to get started using it?", 736 | "timestamp": "2017-10-18T19:51:26.452Z" 737 | }, 738 | { 739 | "name": "nice", 740 | "message": "would you be able to publish the changes to the dat site?", 741 | "timestamp": "2017-10-18T19:52:04.469Z" 742 | }, 743 | { 744 | "name": "nice", 745 | "message": "when's the new build out?", 746 | "timestamp": "2017-10-18T19:52:24.209Z" 747 | }, 748 | { 749 | "name": "nice", 750 | "message": "what do you do for your day job?", 751 | "timestamp": "2017-10-18T19:53:26.775Z" 752 | }, 753 | { 754 | "name": "nice", 755 | "message": "how do you imagine the publishing story going for http rather than dat?", 756 | "timestamp": "2017-10-18T19:54:27.125Z" 757 | }, 758 | { 759 | "name": "nice", 760 | "message": "can'", 761 | "timestamp": "2017-10-18T19:54:51.792Z" 762 | }, 763 | { 764 | "name": "nice", 765 | "message": "can't be dat only to begin with", 766 | "timestamp": "2017-10-18T19:54:58.278Z" 767 | }, 768 | { 769 | "name": "nice", 770 | "message": "it was great", 771 | "timestamp": "2017-10-18T19:57:53.868Z" 772 | }, 773 | { 774 | "name": "nice", 775 | "message": "thanks", 776 | "timestamp": "2017-10-18T19:58:03.516Z" 777 | }, 778 | { 779 | "name": "nice", 780 | "message": "please do more whenever you have the time", 781 | "timestamp": "2017-10-18T19:58:44.496Z" 782 | } 783 | ], 784 | "live": false, 785 | "scratch": "# hey there\n\n- i’m live-coding a version of [enoki](http://enoki.site) which runs in [beaker browser](http://beakerbrowser.com]. enoki is an ultralight cms and beaker is a p2p browser.\n\n- i’ll be adding blocks related to what’s being discussed on the [hangout arena channel](https://www.are.na/jon-kyle-mohr/hang-1).\n\n- my connection is a little spotty—will be back in a few minutes if it drops. they’re also doing construction upstairs so you might hear that.\n\n# follow along\n\n- visit this dat url: dat://1acd82bec98be42044f8eba740fad709c9e12cbdc76c94d3ea56cbf41289efa3/\n- hit fork\n\n# examples\n- https://harpjs.com/" 786 | } -------------------------------------------------------------------------------- /content/02-walk.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "KENNILWORTH", 4 | "created_at": "2017-11-18T20:18:21.438Z", 5 | "image": { 6 | "filename": "8a41250b5f63e3ee1f1043939cccdd83.jpg", 7 | "content_type": "image/jpeg", 8 | "updated_at": "2017-11-18T20:18:23.049Z", 9 | "thumb": { 10 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438795/thumb_8a41250b5f63e3ee1f1043939cccdd83.jpg" 11 | }, 12 | "square": { 13 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438795/square_8a41250b5f63e3ee1f1043939cccdd83.jpg" 14 | }, 15 | "display": { 16 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438795/display_8a41250b5f63e3ee1f1043939cccdd83.jpg" 17 | }, 18 | "large": { 19 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438795/large_8a41250b5f63e3ee1f1043939cccdd83.jpg" 20 | }, 21 | "original": { 22 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438795/original_8a41250b5f63e3ee1f1043939cccdd83.jpg", 23 | "file_size": 1114421, 24 | "file_size_display": "1.06 MB" 25 | } 26 | } 27 | }, 28 | { 29 | "title": "MORENO / KENNILWORTH", 30 | "created_at": "2017-11-18T20:29:31.277Z", 31 | "image": { 32 | "filename": "9c4ae8b2447ba99ea5cd1d4621a9c685.jpg", 33 | "content_type": "image/jpeg", 34 | "updated_at": "2017-11-18T20:29:32.758Z", 35 | "thumb": { 36 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438811/thumb_9c4ae8b2447ba99ea5cd1d4621a9c685.jpg" 37 | }, 38 | "square": { 39 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438811/square_9c4ae8b2447ba99ea5cd1d4621a9c685.jpg" 40 | }, 41 | "display": { 42 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438811/display_9c4ae8b2447ba99ea5cd1d4621a9c685.jpg" 43 | }, 44 | "large": { 45 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438811/large_9c4ae8b2447ba99ea5cd1d4621a9c685.jpg" 46 | }, 47 | "original": { 48 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438811/original_9c4ae8b2447ba99ea5cd1d4621a9c685.jpg", 49 | "file_size": 947528, 50 | "file_size_display": "925 KB" 51 | } 52 | } 53 | }, 54 | { 55 | "title": "W SILVERLAKE DR", 56 | "created_at": "2017-11-18T20:34:24.421Z", 57 | "image": { 58 | "filename": "f8b214f38e6b872055132430ebb29db6.jpg", 59 | "content_type": "image/jpeg", 60 | "updated_at": "2017-11-18T20:34:25.104Z", 61 | "thumb": { 62 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438826/thumb_f8b214f38e6b872055132430ebb29db6.jpg" 63 | }, 64 | "square": { 65 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438826/square_f8b214f38e6b872055132430ebb29db6.jpg" 66 | }, 67 | "display": { 68 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438826/display_f8b214f38e6b872055132430ebb29db6.jpg" 69 | }, 70 | "large": { 71 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438826/large_f8b214f38e6b872055132430ebb29db6.jpg" 72 | }, 73 | "original": { 74 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438826/original_f8b214f38e6b872055132430ebb29db6.jpg", 75 | "file_size": 533602, 76 | "file_size_display": "521 KB" 77 | } 78 | } 79 | }, 80 | { 81 | "title": "EFFIE / SILVERLAKE BLVD", 82 | "created_at": "2017-11-18T20:43:28.871Z", 83 | "image": { 84 | "filename": "41d64be9bd9d590fcb66b208e4b79796.jpg", 85 | "content_type": "image/jpeg", 86 | "updated_at": "2017-11-18T20:43:30.344Z", 87 | "thumb": { 88 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438866/thumb_41d64be9bd9d590fcb66b208e4b79796.jpg" 89 | }, 90 | "square": { 91 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438866/square_41d64be9bd9d590fcb66b208e4b79796.jpg" 92 | }, 93 | "display": { 94 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438866/display_41d64be9bd9d590fcb66b208e4b79796.jpg" 95 | }, 96 | "large": { 97 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438866/large_41d64be9bd9d590fcb66b208e4b79796.jpg" 98 | }, 99 | "original": { 100 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438866/original_41d64be9bd9d590fcb66b208e4b79796.jpg", 101 | "file_size": 498359, 102 | "file_size_display": "487 KB" 103 | } 104 | } 105 | }, 106 | { 107 | "title": "SILVERLAKE BLVD / SUNSET BLVD", 108 | "created_at": "2017-11-18T20:56:37.225Z", 109 | "image": { 110 | "filename": "00e0ec21f9c66709024ed588e23f41c3.jpg", 111 | "content_type": "image/jpeg", 112 | "updated_at": "2017-11-18T20:56:38.629Z", 113 | "thumb": { 114 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438920/thumb_00e0ec21f9c66709024ed588e23f41c3.jpg" 115 | }, 116 | "square": { 117 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438920/square_00e0ec21f9c66709024ed588e23f41c3.jpg" 118 | }, 119 | "display": { 120 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438920/display_00e0ec21f9c66709024ed588e23f41c3.jpg" 121 | }, 122 | "large": { 123 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438920/large_00e0ec21f9c66709024ed588e23f41c3.jpg" 124 | }, 125 | "original": { 126 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438920/original_00e0ec21f9c66709024ed588e23f41c3.jpg", 127 | "file_size": 238987, 128 | "file_size_display": "233 KB" 129 | } 130 | } 131 | }, 132 | { 133 | "title": "SILVERLAKE BLVD / MARATHON", 134 | "created_at": "2017-11-18T20:58:49.257Z", 135 | "image": { 136 | "filename": "4a80240aed456690df0ab69707c00c0a.jpg", 137 | "content_type": "image/jpeg", 138 | "updated_at": "2017-11-18T20:58:49.882Z", 139 | "thumb": { 140 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438924/thumb_4a80240aed456690df0ab69707c00c0a.jpg" 141 | }, 142 | "square": { 143 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438924/square_4a80240aed456690df0ab69707c00c0a.jpg" 144 | }, 145 | "display": { 146 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438924/display_4a80240aed456690df0ab69707c00c0a.jpg" 147 | }, 148 | "large": { 149 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438924/large_4a80240aed456690df0ab69707c00c0a.jpg" 150 | }, 151 | "original": { 152 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438924/original_4a80240aed456690df0ab69707c00c0a.jpg", 153 | "file_size": 516592, 154 | "file_size_display": "504 KB" 155 | } 156 | } 157 | }, 158 | { 159 | "title": "SILVERLAKE BLVD / DILLON ST", 160 | "created_at": "2017-11-18T21:02:46.786Z", 161 | "image": { 162 | "filename": "187b78c12250bc0c1aa3de0915e2ccf6.jpg", 163 | "content_type": "image/jpeg", 164 | "updated_at": "2017-11-18T21:03:01.549Z", 165 | "thumb": { 166 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438937/thumb_187b78c12250bc0c1aa3de0915e2ccf6.jpg" 167 | }, 168 | "square": { 169 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438937/square_187b78c12250bc0c1aa3de0915e2ccf6.jpg" 170 | }, 171 | "display": { 172 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438937/display_187b78c12250bc0c1aa3de0915e2ccf6.jpg" 173 | }, 174 | "large": { 175 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438937/large_187b78c12250bc0c1aa3de0915e2ccf6.jpg" 176 | }, 177 | "original": { 178 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438937/original_187b78c12250bc0c1aa3de0915e2ccf6.jpg", 179 | "file_size": 883145, 180 | "file_size_display": "862 KB" 181 | } 182 | } 183 | }, 184 | { 185 | "title": "101 / SILVERLAKE BLVD ", 186 | "created_at": "2017-11-18T21:06:28.344Z", 187 | "image": { 188 | "filename": "02f893dce11644d33b36ed1c6d81bdfb.jpg", 189 | "content_type": "image/jpeg", 190 | "updated_at": "2017-11-18T21:06:30.339Z", 191 | "thumb": { 192 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438961/thumb_02f893dce11644d33b36ed1c6d81bdfb.jpg" 193 | }, 194 | "square": { 195 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438961/square_02f893dce11644d33b36ed1c6d81bdfb.jpg" 196 | }, 197 | "display": { 198 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438961/display_02f893dce11644d33b36ed1c6d81bdfb.jpg" 199 | }, 200 | "large": { 201 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438961/large_02f893dce11644d33b36ed1c6d81bdfb.jpg" 202 | }, 203 | "original": { 204 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438961/original_02f893dce11644d33b36ed1c6d81bdfb.jpg", 205 | "file_size": 350917, 206 | "file_size_display": "343 KB" 207 | } 208 | } 209 | }, 210 | { 211 | "title": "VIRGIL / TEMPLE", 212 | "created_at": "2017-11-18T21:11:58.635Z", 213 | "image": { 214 | "filename": "93396d48d3c0b34bd66cccfa8e28b03b.jpg", 215 | "content_type": "image/jpeg", 216 | "updated_at": "2017-11-18T21:11:59.264Z", 217 | "thumb": { 218 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438966/thumb_93396d48d3c0b34bd66cccfa8e28b03b.jpg" 219 | }, 220 | "square": { 221 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438966/square_93396d48d3c0b34bd66cccfa8e28b03b.jpg" 222 | }, 223 | "display": { 224 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438966/display_93396d48d3c0b34bd66cccfa8e28b03b.jpg" 225 | }, 226 | "large": { 227 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438966/large_93396d48d3c0b34bd66cccfa8e28b03b.jpg" 228 | }, 229 | "original": { 230 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438966/original_93396d48d3c0b34bd66cccfa8e28b03b.jpg", 231 | "file_size": 372392, 232 | "file_size_display": "364 KB" 233 | } 234 | } 235 | }, 236 | { 237 | "title": "VIRGIL / MADISON", 238 | "created_at": "2017-11-18T21:14:25.454Z", 239 | "image": { 240 | "filename": "f525526d7874dc25853ae2a27bf275c4.jpg", 241 | "content_type": "image/jpeg", 242 | "updated_at": "2017-11-18T21:14:27.259Z", 243 | "thumb": { 244 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438976/thumb_f525526d7874dc25853ae2a27bf275c4.jpg" 245 | }, 246 | "square": { 247 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438976/square_f525526d7874dc25853ae2a27bf275c4.jpg" 248 | }, 249 | "display": { 250 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438976/display_f525526d7874dc25853ae2a27bf275c4.jpg" 251 | }, 252 | "large": { 253 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438976/large_f525526d7874dc25853ae2a27bf275c4.jpg" 254 | }, 255 | "original": { 256 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438976/original_f525526d7874dc25853ae2a27bf275c4.jpg", 257 | "file_size": 421464, 258 | "file_size_display": "412 KB" 259 | } 260 | } 261 | }, 262 | { 263 | "title": "BEVERLY / NEW HAMPSHIRE", 264 | "created_at": "2017-11-18T21:19:01.949Z", 265 | "image": { 266 | "filename": "6957272d07bb6ac8a07be50c369027f3.jpg", 267 | "content_type": "image/jpeg", 268 | "updated_at": "2017-11-18T21:19:07.811Z", 269 | "thumb": { 270 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438992/thumb_6957272d07bb6ac8a07be50c369027f3.jpg" 271 | }, 272 | "square": { 273 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438992/square_6957272d07bb6ac8a07be50c369027f3.jpg" 274 | }, 275 | "display": { 276 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438992/display_6957272d07bb6ac8a07be50c369027f3.jpg" 277 | }, 278 | "large": { 279 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438992/large_6957272d07bb6ac8a07be50c369027f3.jpg" 280 | }, 281 | "original": { 282 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438992/original_6957272d07bb6ac8a07be50c369027f3.jpg", 283 | "file_size": 428484, 284 | "file_size_display": "418 KB" 285 | } 286 | } 287 | }, 288 | { 289 | "title": "BEVERLY / CATALINA", 290 | "created_at": "2017-11-18T21:21:29.307Z", 291 | "image": { 292 | "filename": "1d6b88f449ec3c52b11b51cf5d4f9c9a.jpg", 293 | "content_type": "image/jpeg", 294 | "updated_at": "2017-11-18T21:21:31.045Z", 295 | "thumb": { 296 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438996/thumb_1d6b88f449ec3c52b11b51cf5d4f9c9a.jpg" 297 | }, 298 | "square": { 299 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438996/square_1d6b88f449ec3c52b11b51cf5d4f9c9a.jpg" 300 | }, 301 | "display": { 302 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438996/display_1d6b88f449ec3c52b11b51cf5d4f9c9a.jpg" 303 | }, 304 | "large": { 305 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438996/large_1d6b88f449ec3c52b11b51cf5d4f9c9a.jpg" 306 | }, 307 | "original": { 308 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1438996/original_1d6b88f449ec3c52b11b51cf5d4f9c9a.jpg", 309 | "file_size": 387516, 310 | "file_size_display": "378 KB" 311 | } 312 | } 313 | }, 314 | { 315 | "title": "BEVERLY / NORMANDIE", 316 | "created_at": "2017-11-18T21:25:18.264Z", 317 | "image": { 318 | "filename": "9594021113c927a5ad112d0848890fe0.jpg", 319 | "content_type": "image/jpeg", 320 | "updated_at": "2017-11-18T21:25:21.218Z", 321 | "thumb": { 322 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439000/thumb_9594021113c927a5ad112d0848890fe0.jpg" 323 | }, 324 | "square": { 325 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439000/square_9594021113c927a5ad112d0848890fe0.jpg" 326 | }, 327 | "display": { 328 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439000/display_9594021113c927a5ad112d0848890fe0.jpg" 329 | }, 330 | "large": { 331 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439000/large_9594021113c927a5ad112d0848890fe0.jpg" 332 | }, 333 | "original": { 334 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439000/original_9594021113c927a5ad112d0848890fe0.jpg", 335 | "file_size": 476076, 336 | "file_size_display": "465 KB" 337 | } 338 | } 339 | }, 340 | { 341 | "title": "BEVERLY / NORMANDIE", 342 | "created_at": "2017-11-18T21:26:10.786Z", 343 | "image": { 344 | "filename": "64e5002b8c851d0e5f3575ac92990c90.jpg", 345 | "content_type": "image/jpeg", 346 | "updated_at": "2017-11-18T21:26:11.826Z", 347 | "thumb": { 348 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439001/thumb_64e5002b8c851d0e5f3575ac92990c90.jpg" 349 | }, 350 | "square": { 351 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439001/square_64e5002b8c851d0e5f3575ac92990c90.jpg" 352 | }, 353 | "display": { 354 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439001/display_64e5002b8c851d0e5f3575ac92990c90.jpg" 355 | }, 356 | "large": { 357 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439001/large_64e5002b8c851d0e5f3575ac92990c90.jpg" 358 | }, 359 | "original": { 360 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439001/original_64e5002b8c851d0e5f3575ac92990c90.jpg", 361 | "file_size": 346316, 362 | "file_size_display": "338 KB" 363 | } 364 | } 365 | }, 366 | { 367 | "title": "BEVERLY / WILTON", 368 | "created_at": "2017-11-18T21:39:27.963Z", 369 | "image": { 370 | "filename": "2e7ffaa2db2a22e19ab01c8e305163b3.jpg", 371 | "content_type": "image/jpeg", 372 | "updated_at": "2017-11-18T21:39:30.046Z", 373 | "thumb": { 374 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439023/thumb_2e7ffaa2db2a22e19ab01c8e305163b3.jpg" 375 | }, 376 | "square": { 377 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439023/square_2e7ffaa2db2a22e19ab01c8e305163b3.jpg" 378 | }, 379 | "display": { 380 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439023/display_2e7ffaa2db2a22e19ab01c8e305163b3.jpg" 381 | }, 382 | "large": { 383 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439023/large_2e7ffaa2db2a22e19ab01c8e305163b3.jpg" 384 | }, 385 | "original": { 386 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439023/original_2e7ffaa2db2a22e19ab01c8e305163b3.jpg", 387 | "file_size": 550108, 388 | "file_size_display": "537 KB" 389 | } 390 | } 391 | }, 392 | { 393 | "title": "BEVERLY / VAN NESS", 394 | "created_at": "2017-11-18T21:42:29.979Z", 395 | "image": { 396 | "filename": "e75698ca4b35b9ca6e30da851e651f76.jpg", 397 | "content_type": "image/jpeg", 398 | "updated_at": "2017-11-18T21:42:30.795Z", 399 | "thumb": { 400 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439027/thumb_e75698ca4b35b9ca6e30da851e651f76.jpg" 401 | }, 402 | "square": { 403 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439027/square_e75698ca4b35b9ca6e30da851e651f76.jpg" 404 | }, 405 | "display": { 406 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439027/display_e75698ca4b35b9ca6e30da851e651f76.jpg" 407 | }, 408 | "large": { 409 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439027/large_e75698ca4b35b9ca6e30da851e651f76.jpg" 410 | }, 411 | "original": { 412 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439027/original_e75698ca4b35b9ca6e30da851e651f76.jpg", 413 | "file_size": 413532, 414 | "file_size_display": "404 KB" 415 | } 416 | } 417 | }, 418 | { 419 | "title": "BEVERLY / PLYMOUTH", 420 | "created_at": "2017-11-18T21:47:28.137Z", 421 | "image": { 422 | "filename": "a8a315b0a9605b19be304ab3694eb233.jpg", 423 | "content_type": "image/jpeg", 424 | "updated_at": "2017-11-18T21:47:28.995Z", 425 | "thumb": { 426 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439039/thumb_a8a315b0a9605b19be304ab3694eb233.jpg" 427 | }, 428 | "square": { 429 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439039/square_a8a315b0a9605b19be304ab3694eb233.jpg" 430 | }, 431 | "display": { 432 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439039/display_a8a315b0a9605b19be304ab3694eb233.jpg" 433 | }, 434 | "large": { 435 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439039/large_a8a315b0a9605b19be304ab3694eb233.jpg" 436 | }, 437 | "original": { 438 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439039/original_a8a315b0a9605b19be304ab3694eb233.jpg", 439 | "file_size": 530298, 440 | "file_size_display": "518 KB" 441 | } 442 | } 443 | }, 444 | { 445 | "title": "BEVERLY / BEACHWOOD", 446 | "created_at": "2017-11-18T21:48:37.889Z", 447 | "image": { 448 | "filename": "d24c64271436f11f5c71565e10446ec6.jpg", 449 | "content_type": "image/jpeg", 450 | "updated_at": "2017-11-18T21:48:38.331Z", 451 | "thumb": { 452 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439043/thumb_d24c64271436f11f5c71565e10446ec6.jpg" 453 | }, 454 | "square": { 455 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439043/square_d24c64271436f11f5c71565e10446ec6.jpg" 456 | }, 457 | "display": { 458 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439043/display_d24c64271436f11f5c71565e10446ec6.jpg" 459 | }, 460 | "large": { 461 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439043/large_d24c64271436f11f5c71565e10446ec6.jpg" 462 | }, 463 | "original": { 464 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439043/original_d24c64271436f11f5c71565e10446ec6.jpg", 465 | "file_size": 450244, 466 | "file_size_display": "440 KB" 467 | } 468 | } 469 | }, 470 | { 471 | "title": "BEVERLY / ARDEN", 472 | "created_at": "2017-11-18T21:52:52.578Z", 473 | "image": { 474 | "filename": "408395e8589972c386d5e10a4862c643.jpg", 475 | "content_type": "image/jpeg", 476 | "updated_at": "2017-11-18T21:52:54.536Z", 477 | "thumb": { 478 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439051/thumb_408395e8589972c386d5e10a4862c643.jpg" 479 | }, 480 | "square": { 481 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439051/square_408395e8589972c386d5e10a4862c643.jpg" 482 | }, 483 | "display": { 484 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439051/display_408395e8589972c386d5e10a4862c643.jpg" 485 | }, 486 | "large": { 487 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439051/large_408395e8589972c386d5e10a4862c643.jpg" 488 | }, 489 | "original": { 490 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439051/original_408395e8589972c386d5e10a4862c643.jpg", 491 | "file_size": 473777, 492 | "file_size_display": "463 KB" 493 | } 494 | } 495 | }, 496 | { 497 | "title": "BEVERLY/ WILSHIRE COUNTRY CLUB", 498 | "created_at": "2017-11-18T21:55:04.324Z", 499 | "image": { 500 | "filename": "f8df1c8370234a93050e4e70c38350d5.jpg", 501 | "content_type": "image/jpeg", 502 | "updated_at": "2017-11-18T21:55:06.550Z", 503 | "thumb": { 504 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439058/thumb_f8df1c8370234a93050e4e70c38350d5.jpg" 505 | }, 506 | "square": { 507 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439058/square_f8df1c8370234a93050e4e70c38350d5.jpg" 508 | }, 509 | "display": { 510 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439058/display_f8df1c8370234a93050e4e70c38350d5.jpg" 511 | }, 512 | "large": { 513 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439058/large_f8df1c8370234a93050e4e70c38350d5.jpg" 514 | }, 515 | "original": { 516 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439058/original_f8df1c8370234a93050e4e70c38350d5.jpg", 517 | "file_size": 458717, 518 | "file_size_display": "448 KB" 519 | } 520 | } 521 | }, 522 | { 523 | "title": "BEVERLY / LAS PALMAS", 524 | "created_at": "2017-11-18T22:01:50.545Z", 525 | "image": { 526 | "filename": "d62022f2cdace6ec63927d5ccb9bb9f5.jpg", 527 | "content_type": "image/jpeg", 528 | "updated_at": "2017-11-18T22:01:52.283Z", 529 | "thumb": { 530 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439070/thumb_d62022f2cdace6ec63927d5ccb9bb9f5.jpg" 531 | }, 532 | "square": { 533 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439070/square_d62022f2cdace6ec63927d5ccb9bb9f5.jpg" 534 | }, 535 | "display": { 536 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439070/display_d62022f2cdace6ec63927d5ccb9bb9f5.jpg" 537 | }, 538 | "large": { 539 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439070/large_d62022f2cdace6ec63927d5ccb9bb9f5.jpg" 540 | }, 541 | "original": { 542 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439070/original_d62022f2cdace6ec63927d5ccb9bb9f5.jpg", 543 | "file_size": 433600, 544 | "file_size_display": "423 KB" 545 | } 546 | } 547 | }, 548 | { 549 | "title": "BEVERLY / LAS PALMAS", 550 | "created_at": "2017-11-18T22:04:03.514Z", 551 | "image": { 552 | "filename": "16335135d07daf113a4636abef6361cf.jpg", 553 | "content_type": "image/jpeg", 554 | "updated_at": "2017-11-18T22:04:03.720Z", 555 | "thumb": { 556 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439076/thumb_16335135d07daf113a4636abef6361cf.jpg" 557 | }, 558 | "square": { 559 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439076/square_16335135d07daf113a4636abef6361cf.jpg" 560 | }, 561 | "display": { 562 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439076/display_16335135d07daf113a4636abef6361cf.jpg" 563 | }, 564 | "large": { 565 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439076/large_16335135d07daf113a4636abef6361cf.jpg" 566 | }, 567 | "original": { 568 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439076/original_16335135d07daf113a4636abef6361cf.jpg", 569 | "file_size": 433600, 570 | "file_size_display": "423 KB" 571 | } 572 | } 573 | }, 574 | { 575 | "title": "BEVERLY / HIGHLAND", 576 | "created_at": "2017-11-18T22:05:07.465Z", 577 | "image": { 578 | "filename": "f2faa474f201f7d5eedf9419108bf299.jpg", 579 | "content_type": "image/jpeg", 580 | "updated_at": "2017-11-18T22:05:07.933Z", 581 | "thumb": { 582 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439078/thumb_f2faa474f201f7d5eedf9419108bf299.jpg" 583 | }, 584 | "square": { 585 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439078/square_f2faa474f201f7d5eedf9419108bf299.jpg" 586 | }, 587 | "display": { 588 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439078/display_f2faa474f201f7d5eedf9419108bf299.jpg" 589 | }, 590 | "large": { 591 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439078/large_f2faa474f201f7d5eedf9419108bf299.jpg" 592 | }, 593 | "original": { 594 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439078/original_f2faa474f201f7d5eedf9419108bf299.jpg", 595 | "file_size": 651414, 596 | "file_size_display": "636 KB" 597 | } 598 | } 599 | }, 600 | { 601 | "title": "BEVERLY / GARDNER", 602 | "created_at": "2017-11-18T22:22:06.641Z", 603 | "image": { 604 | "filename": "d3667098f02d7a66848ce7af6ab7a3ee.jpg", 605 | "content_type": "image/jpeg", 606 | "updated_at": "2017-11-18T22:22:09.134Z", 607 | "thumb": { 608 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439097/thumb_d3667098f02d7a66848ce7af6ab7a3ee.jpg" 609 | }, 610 | "square": { 611 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439097/square_d3667098f02d7a66848ce7af6ab7a3ee.jpg" 612 | }, 613 | "display": { 614 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439097/display_d3667098f02d7a66848ce7af6ab7a3ee.jpg" 615 | }, 616 | "large": { 617 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439097/large_d3667098f02d7a66848ce7af6ab7a3ee.jpg" 618 | }, 619 | "original": { 620 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439097/original_d3667098f02d7a66848ce7af6ab7a3ee.jpg", 621 | "file_size": 528323, 622 | "file_size_display": "516 KB" 623 | } 624 | } 625 | }, 626 | { 627 | "title": "BEVERLY / GENESSE", 628 | "created_at": "2017-11-18T22:25:27.076Z", 629 | "image": { 630 | "filename": "a5dcd3db256ad6daf19d23d672f51853.jpg", 631 | "content_type": "image/jpeg", 632 | "updated_at": "2017-11-18T22:25:27.847Z", 633 | "thumb": { 634 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439105/thumb_a5dcd3db256ad6daf19d23d672f51853.jpg" 635 | }, 636 | "square": { 637 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439105/square_a5dcd3db256ad6daf19d23d672f51853.jpg" 638 | }, 639 | "display": { 640 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439105/display_a5dcd3db256ad6daf19d23d672f51853.jpg" 641 | }, 642 | "large": { 643 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439105/large_a5dcd3db256ad6daf19d23d672f51853.jpg" 644 | }, 645 | "original": { 646 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439105/original_a5dcd3db256ad6daf19d23d672f51853.jpg", 647 | "file_size": 355141, 648 | "file_size_display": "347 KB" 649 | } 650 | } 651 | }, 652 | { 653 | "title": "BEVERLY / SWEETZER", 654 | "created_at": "2017-11-18T22:35:38.949Z", 655 | "image": { 656 | "filename": "2b299607c319bc92b07aea008402b819.jpg", 657 | "content_type": "image/jpeg", 658 | "updated_at": "2017-11-18T22:35:39.499Z", 659 | "thumb": { 660 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439117/thumb_2b299607c319bc92b07aea008402b819.jpg" 661 | }, 662 | "square": { 663 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439117/square_2b299607c319bc92b07aea008402b819.jpg" 664 | }, 665 | "display": { 666 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439117/display_2b299607c319bc92b07aea008402b819.jpg" 667 | }, 668 | "large": { 669 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439117/large_2b299607c319bc92b07aea008402b819.jpg" 670 | }, 671 | "original": { 672 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439117/original_2b299607c319bc92b07aea008402b819.jpg", 673 | "file_size": 337799, 674 | "file_size_display": "330 KB" 675 | } 676 | } 677 | }, 678 | { 679 | "title": "BEVERLY / LA CIENEGA", 680 | "created_at": "2017-11-18T22:42:09.499Z", 681 | "image": { 682 | "filename": "e732a1b409d643b4954230601699aa65.jpg", 683 | "content_type": "image/jpeg", 684 | "updated_at": "2017-11-18T22:42:10.743Z", 685 | "thumb": { 686 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439124/thumb_e732a1b409d643b4954230601699aa65.jpg" 687 | }, 688 | "square": { 689 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439124/square_e732a1b409d643b4954230601699aa65.jpg" 690 | }, 691 | "display": { 692 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439124/display_e732a1b409d643b4954230601699aa65.jpg" 693 | }, 694 | "large": { 695 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439124/large_e732a1b409d643b4954230601699aa65.jpg" 696 | }, 697 | "original": { 698 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439124/original_e732a1b409d643b4954230601699aa65.jpg", 699 | "file_size": 650215, 700 | "file_size_display": "635 KB" 701 | } 702 | } 703 | }, 704 | { 705 | "title": "BEVERLY / SAN VICENTE", 706 | "created_at": "2017-11-18T22:47:26.789Z", 707 | "image": { 708 | "filename": "821df7d60ccedbee790765e0ef9d04a6.jpg", 709 | "content_type": "image/jpeg", 710 | "updated_at": "2017-11-18T22:47:30.662Z", 711 | "thumb": { 712 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439145/thumb_821df7d60ccedbee790765e0ef9d04a6.jpg" 713 | }, 714 | "square": { 715 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439145/square_821df7d60ccedbee790765e0ef9d04a6.jpg" 716 | }, 717 | "display": { 718 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439145/display_821df7d60ccedbee790765e0ef9d04a6.jpg" 719 | }, 720 | "large": { 721 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439145/large_821df7d60ccedbee790765e0ef9d04a6.jpg" 722 | }, 723 | "original": { 724 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439145/original_821df7d60ccedbee790765e0ef9d04a6.jpg", 725 | "file_size": 475517, 726 | "file_size_display": "464 KB" 727 | } 728 | } 729 | }, 730 | { 731 | "title": "BEVERLY / ROBERTSON", 732 | "created_at": "2017-11-18T22:51:16.325Z", 733 | "image": { 734 | "filename": "772d7e396cf292da8e12c27b00aec1d1.jpg", 735 | "content_type": "image/jpeg", 736 | "updated_at": "2017-11-18T22:51:16.718Z", 737 | "thumb": { 738 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439148/thumb_772d7e396cf292da8e12c27b00aec1d1.jpg" 739 | }, 740 | "square": { 741 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439148/square_772d7e396cf292da8e12c27b00aec1d1.jpg" 742 | }, 743 | "display": { 744 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439148/display_772d7e396cf292da8e12c27b00aec1d1.jpg" 745 | }, 746 | "large": { 747 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439148/large_772d7e396cf292da8e12c27b00aec1d1.jpg" 748 | }, 749 | "original": { 750 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439148/original_772d7e396cf292da8e12c27b00aec1d1.jpg", 751 | "file_size": 625528, 752 | "file_size_display": "611 KB" 753 | } 754 | } 755 | }, 756 | { 757 | "title": "BEVERLY / SWALL", 758 | "created_at": "2017-11-18T22:52:21.177Z", 759 | "image": { 760 | "filename": "ebcd90b576507bf4b013d1b3c72a468d.jpg", 761 | "content_type": "image/jpeg", 762 | "updated_at": "2017-11-18T22:52:22.617Z", 763 | "thumb": { 764 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439152/thumb_ebcd90b576507bf4b013d1b3c72a468d.jpg" 765 | }, 766 | "square": { 767 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439152/square_ebcd90b576507bf4b013d1b3c72a468d.jpg" 768 | }, 769 | "display": { 770 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439152/display_ebcd90b576507bf4b013d1b3c72a468d.jpg" 771 | }, 772 | "large": { 773 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439152/large_ebcd90b576507bf4b013d1b3c72a468d.jpg" 774 | }, 775 | "original": { 776 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439152/original_ebcd90b576507bf4b013d1b3c72a468d.jpg", 777 | "file_size": 656626, 778 | "file_size_display": "641 KB" 779 | } 780 | } 781 | }, 782 | { 783 | "title": "BEVERLY / ALMONT", 784 | "created_at": "2017-11-18T22:54:11.597Z", 785 | "image": { 786 | "filename": "1a960c310bfa679c67e45bbe20b0622d.jpg", 787 | "content_type": "image/jpeg", 788 | "updated_at": "2017-11-18T22:54:14.887Z", 789 | "thumb": { 790 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439158/thumb_1a960c310bfa679c67e45bbe20b0622d.jpg" 791 | }, 792 | "square": { 793 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439158/square_1a960c310bfa679c67e45bbe20b0622d.jpg" 794 | }, 795 | "display": { 796 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439158/display_1a960c310bfa679c67e45bbe20b0622d.jpg" 797 | }, 798 | "large": { 799 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439158/large_1a960c310bfa679c67e45bbe20b0622d.jpg" 800 | }, 801 | "original": { 802 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439158/original_1a960c310bfa679c67e45bbe20b0622d.jpg", 803 | "file_size": 324143, 804 | "file_size_display": "317 KB" 805 | } 806 | } 807 | }, 808 | { 809 | "title": "BEVERLY / WETHERLY", 810 | "created_at": "2017-11-18T22:55:59.490Z", 811 | "image": { 812 | "filename": "d48c65eda20adcc9e36cb3f2f4ab8789.jpg", 813 | "content_type": "image/jpeg", 814 | "updated_at": "2017-11-18T22:56:00.933Z", 815 | "thumb": { 816 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439164/thumb_d48c65eda20adcc9e36cb3f2f4ab8789.jpg" 817 | }, 818 | "square": { 819 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439164/square_d48c65eda20adcc9e36cb3f2f4ab8789.jpg" 820 | }, 821 | "display": { 822 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439164/display_d48c65eda20adcc9e36cb3f2f4ab8789.jpg" 823 | }, 824 | "large": { 825 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439164/large_d48c65eda20adcc9e36cb3f2f4ab8789.jpg" 826 | }, 827 | "original": { 828 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439164/original_d48c65eda20adcc9e36cb3f2f4ab8789.jpg", 829 | "file_size": 377246, 830 | "file_size_display": "368 KB" 831 | } 832 | } 833 | }, 834 | { 835 | "title": "BEVERLY/ DOWNEY", 836 | "created_at": "2017-11-18T22:58:40.752Z", 837 | "image": { 838 | "filename": "23c6460616fe9bd6c4fc2844036db3f1.jpg", 839 | "content_type": "image/jpeg", 840 | "updated_at": "2017-11-18T22:58:41.300Z", 841 | "thumb": { 842 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439180/thumb_23c6460616fe9bd6c4fc2844036db3f1.jpg" 843 | }, 844 | "square": { 845 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439180/square_23c6460616fe9bd6c4fc2844036db3f1.jpg" 846 | }, 847 | "display": { 848 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439180/display_23c6460616fe9bd6c4fc2844036db3f1.jpg" 849 | }, 850 | "large": { 851 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439180/large_23c6460616fe9bd6c4fc2844036db3f1.jpg" 852 | }, 853 | "original": { 854 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439180/original_23c6460616fe9bd6c4fc2844036db3f1.jpg", 855 | "file_size": 512257, 856 | "file_size_display": "500 KB" 857 | } 858 | } 859 | }, 860 | { 861 | "title": "SANTA MONICA / ELM", 862 | "created_at": "2017-11-18T23:07:07.881Z", 863 | "image": { 864 | "filename": "8790673a9a731fac585dbbc03e87035a.jpg", 865 | "content_type": "image/jpeg", 866 | "updated_at": "2017-11-18T23:07:08.718Z", 867 | "thumb": { 868 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439199/thumb_8790673a9a731fac585dbbc03e87035a.jpg" 869 | }, 870 | "square": { 871 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439199/square_8790673a9a731fac585dbbc03e87035a.jpg" 872 | }, 873 | "display": { 874 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439199/display_8790673a9a731fac585dbbc03e87035a.jpg" 875 | }, 876 | "large": { 877 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439199/large_8790673a9a731fac585dbbc03e87035a.jpg" 878 | }, 879 | "original": { 880 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439199/original_8790673a9a731fac585dbbc03e87035a.jpg", 881 | "file_size": 692565, 882 | "file_size_display": "676 KB" 883 | } 884 | } 885 | }, 886 | { 887 | "title": "SANTA MONICA / BEVERLY DR", 888 | "created_at": "2017-11-18T23:15:37.283Z", 889 | "image": { 890 | "filename": "fb81551ee803b98acd52d75ff58b224e.jpg", 891 | "content_type": "image/jpeg", 892 | "updated_at": "2017-11-18T23:15:37.673Z", 893 | "thumb": { 894 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439215/thumb_fb81551ee803b98acd52d75ff58b224e.jpg" 895 | }, 896 | "square": { 897 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439215/square_fb81551ee803b98acd52d75ff58b224e.jpg" 898 | }, 899 | "display": { 900 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439215/display_fb81551ee803b98acd52d75ff58b224e.jpg" 901 | }, 902 | "large": { 903 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439215/large_fb81551ee803b98acd52d75ff58b224e.jpg" 904 | }, 905 | "original": { 906 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439215/original_fb81551ee803b98acd52d75ff58b224e.jpg", 907 | "file_size": 416603, 908 | "file_size_display": "407 KB" 909 | } 910 | } 911 | }, 912 | { 913 | "title": "BEVERLY / RODEO", 914 | "created_at": "2017-11-18T23:20:47.765Z", 915 | "image": { 916 | "filename": "0f7e6eeb29d1b02db12bfffbd4dca232.jpg", 917 | "content_type": "image/jpeg", 918 | "updated_at": "2017-11-18T23:20:48.417Z", 919 | "thumb": { 920 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439233/thumb_0f7e6eeb29d1b02db12bfffbd4dca232.jpg" 921 | }, 922 | "square": { 923 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439233/square_0f7e6eeb29d1b02db12bfffbd4dca232.jpg" 924 | }, 925 | "display": { 926 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439233/display_0f7e6eeb29d1b02db12bfffbd4dca232.jpg" 927 | }, 928 | "large": { 929 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439233/large_0f7e6eeb29d1b02db12bfffbd4dca232.jpg" 930 | }, 931 | "original": { 932 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439233/original_0f7e6eeb29d1b02db12bfffbd4dca232.jpg", 933 | "file_size": 368233, 934 | "file_size_display": "360 KB" 935 | } 936 | } 937 | }, 938 | { 939 | "title": "BEVERLY / RODEO", 940 | "created_at": "2017-11-18T23:22:02.528Z", 941 | "image": { 942 | "filename": "c700366d5fe4deaf475364695b5f0ec3.jpg", 943 | "content_type": "image/jpeg", 944 | "updated_at": "2017-11-18T23:22:02.851Z", 945 | "thumb": { 946 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439252/thumb_c700366d5fe4deaf475364695b5f0ec3.jpg" 947 | }, 948 | "square": { 949 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439252/square_c700366d5fe4deaf475364695b5f0ec3.jpg" 950 | }, 951 | "display": { 952 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439252/display_c700366d5fe4deaf475364695b5f0ec3.jpg" 953 | }, 954 | "large": { 955 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439252/large_c700366d5fe4deaf475364695b5f0ec3.jpg" 956 | }, 957 | "original": { 958 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439252/original_c700366d5fe4deaf475364695b5f0ec3.jpg", 959 | "file_size": 361419, 960 | "file_size_display": "353 KB" 961 | } 962 | } 963 | }, 964 | { 965 | "title": "RODEO / WILSHIRE", 966 | "created_at": "2017-11-18T23:28:24.178Z", 967 | "image": { 968 | "filename": "a167d2ca6b8e159088e2bc5eb7218563.jpg", 969 | "content_type": "image/jpeg", 970 | "updated_at": "2017-11-18T23:28:28.300Z", 971 | "thumb": { 972 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439295/thumb_a167d2ca6b8e159088e2bc5eb7218563.jpg" 973 | }, 974 | "square": { 975 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439295/square_a167d2ca6b8e159088e2bc5eb7218563.jpg" 976 | }, 977 | "display": { 978 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439295/display_a167d2ca6b8e159088e2bc5eb7218563.jpg" 979 | }, 980 | "large": { 981 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439295/large_a167d2ca6b8e159088e2bc5eb7218563.jpg" 982 | }, 983 | "original": { 984 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439295/original_a167d2ca6b8e159088e2bc5eb7218563.jpg", 985 | "file_size": 461787, 986 | "file_size_display": "451 KB" 987 | } 988 | } 989 | }, 990 | { 991 | "title": "WILSHIRE / RODEO", 992 | "created_at": "2017-11-18T23:29:45.002Z", 993 | "image": { 994 | "filename": "04538228faae8afdcca29a66a0408c66.jpg", 995 | "content_type": "image/jpeg", 996 | "updated_at": "2017-11-18T23:29:46.924Z", 997 | "thumb": { 998 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439297/thumb_04538228faae8afdcca29a66a0408c66.jpg" 999 | }, 1000 | "square": { 1001 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439297/square_04538228faae8afdcca29a66a0408c66.jpg" 1002 | }, 1003 | "display": { 1004 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439297/display_04538228faae8afdcca29a66a0408c66.jpg" 1005 | }, 1006 | "large": { 1007 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439297/large_04538228faae8afdcca29a66a0408c66.jpg" 1008 | }, 1009 | "original": { 1010 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439297/original_04538228faae8afdcca29a66a0408c66.jpg", 1011 | "file_size": 569848, 1012 | "file_size_display": "556 KB" 1013 | } 1014 | } 1015 | }, 1016 | { 1017 | "title": "SANTA MONICA / WILSHIRE", 1018 | "created_at": "2017-11-18T23:41:27.589Z", 1019 | "image": { 1020 | "filename": "6d962c8cced94e64bf717f7202021d09.jpg", 1021 | "content_type": "image/jpeg", 1022 | "updated_at": "2017-11-18T23:41:32.033Z", 1023 | "thumb": { 1024 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439321/thumb_6d962c8cced94e64bf717f7202021d09.jpg" 1025 | }, 1026 | "square": { 1027 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439321/square_6d962c8cced94e64bf717f7202021d09.jpg" 1028 | }, 1029 | "display": { 1030 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439321/display_6d962c8cced94e64bf717f7202021d09.jpg" 1031 | }, 1032 | "large": { 1033 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439321/large_6d962c8cced94e64bf717f7202021d09.jpg" 1034 | }, 1035 | "original": { 1036 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439321/original_6d962c8cced94e64bf717f7202021d09.jpg", 1037 | "file_size": 312805, 1038 | "file_size_display": "305 KB" 1039 | } 1040 | } 1041 | }, 1042 | { 1043 | "title": "SANTA MONICA / CHARLEVILLE", 1044 | "created_at": "2017-11-18T23:43:00.284Z", 1045 | "image": { 1046 | "filename": "12d54a09c38217e3aaa3c2d8f190ecf1.jpg", 1047 | "content_type": "image/jpeg", 1048 | "updated_at": "2017-11-18T23:57:56.520Z", 1049 | "thumb": { 1050 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439322/thumb_12d54a09c38217e3aaa3c2d8f190ecf1.jpg" 1051 | }, 1052 | "square": { 1053 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439322/square_12d54a09c38217e3aaa3c2d8f190ecf1.jpg" 1054 | }, 1055 | "display": { 1056 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439322/display_12d54a09c38217e3aaa3c2d8f190ecf1.jpg" 1057 | }, 1058 | "large": { 1059 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439322/large_12d54a09c38217e3aaa3c2d8f190ecf1.jpg" 1060 | }, 1061 | "original": { 1062 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439322/original_12d54a09c38217e3aaa3c2d8f190ecf1.jpg", 1063 | "file_size": 427038, 1064 | "file_size_display": "417 KB" 1065 | } 1066 | } 1067 | }, 1068 | { 1069 | "title": "SANTA MONICA / E CENTURY PARK", 1070 | "created_at": "2017-11-18T23:49:30.387Z", 1071 | "image": { 1072 | "filename": "b6c3841f42cece4ebf9704d2449a841a.jpg", 1073 | "content_type": "image/jpeg", 1074 | "updated_at": "2017-11-18T23:59:03.919Z", 1075 | "thumb": { 1076 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439340/thumb_b6c3841f42cece4ebf9704d2449a841a.jpg" 1077 | }, 1078 | "square": { 1079 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439340/square_b6c3841f42cece4ebf9704d2449a841a.jpg" 1080 | }, 1081 | "display": { 1082 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439340/display_b6c3841f42cece4ebf9704d2449a841a.jpg" 1083 | }, 1084 | "large": { 1085 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439340/large_b6c3841f42cece4ebf9704d2449a841a.jpg" 1086 | }, 1087 | "original": { 1088 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439340/original_b6c3841f42cece4ebf9704d2449a841a.jpg", 1089 | "file_size": 512337, 1090 | "file_size_display": "500 KB" 1091 | } 1092 | } 1093 | }, 1094 | { 1095 | "title": "SANTA MONICA / CENTURY PARK WAY", 1096 | "created_at": "2017-11-18T23:56:32.361Z", 1097 | "image": { 1098 | "filename": "258da430c8d1165cc9214ddfdc1cda28.jpg", 1099 | "content_type": "image/jpeg", 1100 | "updated_at": "2017-11-19T00:00:00.865Z", 1101 | "thumb": { 1102 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439358/thumb_258da430c8d1165cc9214ddfdc1cda28.jpg" 1103 | }, 1104 | "square": { 1105 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439358/square_258da430c8d1165cc9214ddfdc1cda28.jpg" 1106 | }, 1107 | "display": { 1108 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439358/display_258da430c8d1165cc9214ddfdc1cda28.jpg" 1109 | }, 1110 | "large": { 1111 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439358/large_258da430c8d1165cc9214ddfdc1cda28.jpg" 1112 | }, 1113 | "original": { 1114 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439358/original_258da430c8d1165cc9214ddfdc1cda28.jpg", 1115 | "file_size": 474974, 1116 | "file_size_display": "464 KB" 1117 | } 1118 | } 1119 | }, 1120 | { 1121 | "title": "SANTA MONICA / WEST CENTURY WAY", 1122 | "created_at": "2017-11-19T00:04:39.937Z", 1123 | "image": { 1124 | "filename": "4d7ad795730312f34756d53c6049ce5a.jpg", 1125 | "content_type": "image/jpeg", 1126 | "updated_at": "2017-11-19T00:04:41.149Z", 1127 | "thumb": { 1128 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439382/thumb_4d7ad795730312f34756d53c6049ce5a.jpg" 1129 | }, 1130 | "square": { 1131 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439382/square_4d7ad795730312f34756d53c6049ce5a.jpg" 1132 | }, 1133 | "display": { 1134 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439382/display_4d7ad795730312f34756d53c6049ce5a.jpg" 1135 | }, 1136 | "large": { 1137 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439382/large_4d7ad795730312f34756d53c6049ce5a.jpg" 1138 | }, 1139 | "original": { 1140 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439382/original_4d7ad795730312f34756d53c6049ce5a.jpg", 1141 | "file_size": 301183, 1142 | "file_size_display": "294 KB" 1143 | } 1144 | } 1145 | }, 1146 | { 1147 | "title": "SANTA MONICA / PANDORA", 1148 | "created_at": "2017-11-19T00:24:26.567Z", 1149 | "image": { 1150 | "filename": "a155a681c8c31dc062097d9b9fc18c66.jpg", 1151 | "content_type": "image/jpeg", 1152 | "updated_at": "2017-11-19T00:24:28.371Z", 1153 | "thumb": { 1154 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439393/thumb_a155a681c8c31dc062097d9b9fc18c66.jpg" 1155 | }, 1156 | "square": { 1157 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439393/square_a155a681c8c31dc062097d9b9fc18c66.jpg" 1158 | }, 1159 | "display": { 1160 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439393/display_a155a681c8c31dc062097d9b9fc18c66.jpg" 1161 | }, 1162 | "large": { 1163 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439393/large_a155a681c8c31dc062097d9b9fc18c66.jpg" 1164 | }, 1165 | "original": { 1166 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439393/original_a155a681c8c31dc062097d9b9fc18c66.jpg", 1167 | "file_size": 839889, 1168 | "file_size_display": "820 KB" 1169 | } 1170 | } 1171 | }, 1172 | { 1173 | "title": "SANTA MONICA / WESTHOLME", 1174 | "created_at": "2017-11-19T00:28:31.809Z", 1175 | "image": { 1176 | "filename": "de9a1d38f44beb1b1f005ec570c69a55.jpg", 1177 | "content_type": "image/jpeg", 1178 | "updated_at": "2017-11-19T00:28:33.542Z", 1179 | "thumb": { 1180 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439401/thumb_de9a1d38f44beb1b1f005ec570c69a55.jpg" 1181 | }, 1182 | "square": { 1183 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439401/square_de9a1d38f44beb1b1f005ec570c69a55.jpg" 1184 | }, 1185 | "display": { 1186 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439401/display_de9a1d38f44beb1b1f005ec570c69a55.jpg" 1187 | }, 1188 | "large": { 1189 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439401/large_de9a1d38f44beb1b1f005ec570c69a55.jpg" 1190 | }, 1191 | "original": { 1192 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439401/original_de9a1d38f44beb1b1f005ec570c69a55.jpg", 1193 | "file_size": 753476, 1194 | "file_size_display": "736 KB" 1195 | } 1196 | } 1197 | }, 1198 | { 1199 | "title": "SANTA MONICA / PARNELL", 1200 | "created_at": "2017-11-19T00:30:39.720Z", 1201 | "image": { 1202 | "filename": "78ebd3e4667d24189f83fe919bfc35a4.jpg", 1203 | "content_type": "image/jpeg", 1204 | "updated_at": "2017-11-19T00:30:42.020Z", 1205 | "thumb": { 1206 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439404/thumb_78ebd3e4667d24189f83fe919bfc35a4.jpg" 1207 | }, 1208 | "square": { 1209 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439404/square_78ebd3e4667d24189f83fe919bfc35a4.jpg" 1210 | }, 1211 | "display": { 1212 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439404/display_78ebd3e4667d24189f83fe919bfc35a4.jpg" 1213 | }, 1214 | "large": { 1215 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439404/large_78ebd3e4667d24189f83fe919bfc35a4.jpg" 1216 | }, 1217 | "original": { 1218 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439404/original_78ebd3e4667d24189f83fe919bfc35a4.jpg", 1219 | "file_size": 570418, 1220 | "file_size_display": "557 KB" 1221 | } 1222 | } 1223 | }, 1224 | { 1225 | "title": "SANTA MONICA / MANNING", 1226 | "created_at": "2017-11-19T00:31:38.541Z", 1227 | "image": { 1228 | "filename": "ad8693276868b9987ac6ac48cdd2cb0c.jpg", 1229 | "content_type": "image/jpeg", 1230 | "updated_at": "2017-11-19T00:31:40.796Z", 1231 | "thumb": { 1232 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439406/thumb_ad8693276868b9987ac6ac48cdd2cb0c.jpg" 1233 | }, 1234 | "square": { 1235 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439406/square_ad8693276868b9987ac6ac48cdd2cb0c.jpg" 1236 | }, 1237 | "display": { 1238 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439406/display_ad8693276868b9987ac6ac48cdd2cb0c.jpg" 1239 | }, 1240 | "large": { 1241 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439406/large_ad8693276868b9987ac6ac48cdd2cb0c.jpg" 1242 | }, 1243 | "original": { 1244 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439406/original_ad8693276868b9987ac6ac48cdd2cb0c.jpg", 1245 | "file_size": 626675, 1246 | "file_size_display": "612 KB" 1247 | } 1248 | } 1249 | }, 1250 | { 1251 | "title": "SANTA MONICA / OVERLAND", 1252 | "created_at": "2017-11-19T00:33:56.174Z", 1253 | "image": { 1254 | "filename": "cbad73fcded3f928361a86bcb43d3e78.jpg", 1255 | "content_type": "image/jpeg", 1256 | "updated_at": "2017-11-19T00:34:00.251Z", 1257 | "thumb": { 1258 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439410/thumb_cbad73fcded3f928361a86bcb43d3e78.jpg" 1259 | }, 1260 | "square": { 1261 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439410/square_cbad73fcded3f928361a86bcb43d3e78.jpg" 1262 | }, 1263 | "display": { 1264 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439410/display_cbad73fcded3f928361a86bcb43d3e78.jpg" 1265 | }, 1266 | "large": { 1267 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439410/large_cbad73fcded3f928361a86bcb43d3e78.jpg" 1268 | }, 1269 | "original": { 1270 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439410/original_cbad73fcded3f928361a86bcb43d3e78.jpg", 1271 | "file_size": 330539, 1272 | "file_size_display": "323 KB" 1273 | } 1274 | } 1275 | }, 1276 | { 1277 | "title": "405", 1278 | "created_at": "2017-11-19T00:45:57.281Z", 1279 | "image": { 1280 | "filename": "0297b3c16f10d75dcee8de9e2e1a43a4.jpg", 1281 | "content_type": "image/jpeg", 1282 | "updated_at": "2017-11-19T00:45:59.671Z", 1283 | "thumb": { 1284 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439424/thumb_0297b3c16f10d75dcee8de9e2e1a43a4.jpg" 1285 | }, 1286 | "square": { 1287 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439424/square_0297b3c16f10d75dcee8de9e2e1a43a4.jpg" 1288 | }, 1289 | "display": { 1290 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439424/display_0297b3c16f10d75dcee8de9e2e1a43a4.jpg" 1291 | }, 1292 | "large": { 1293 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439424/large_0297b3c16f10d75dcee8de9e2e1a43a4.jpg" 1294 | }, 1295 | "original": { 1296 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439424/original_0297b3c16f10d75dcee8de9e2e1a43a4.jpg", 1297 | "file_size": 252748, 1298 | "file_size_display": "247 KB" 1299 | } 1300 | } 1301 | }, 1302 | { 1303 | "title": "SANTA MONICA / FEDERAL", 1304 | "created_at": "2017-11-19T00:51:21.431Z", 1305 | "image": { 1306 | "filename": "3086a3cddd8bf1d5c90a9063dc38f68a.jpg", 1307 | "content_type": "image/jpeg", 1308 | "updated_at": "2017-11-19T00:51:21.755Z", 1309 | "thumb": { 1310 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439467/thumb_3086a3cddd8bf1d5c90a9063dc38f68a.jpg" 1311 | }, 1312 | "square": { 1313 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439467/square_3086a3cddd8bf1d5c90a9063dc38f68a.jpg" 1314 | }, 1315 | "display": { 1316 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439467/display_3086a3cddd8bf1d5c90a9063dc38f68a.jpg" 1317 | }, 1318 | "large": { 1319 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439467/large_3086a3cddd8bf1d5c90a9063dc38f68a.jpg" 1320 | }, 1321 | "original": { 1322 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439467/original_3086a3cddd8bf1d5c90a9063dc38f68a.jpg", 1323 | "file_size": 274936, 1324 | "file_size_display": "268 KB" 1325 | } 1326 | } 1327 | }, 1328 | { 1329 | "title": "SANTA MONICA / HARVARD", 1330 | "created_at": "2017-11-19T01:03:50.436Z", 1331 | "image": { 1332 | "filename": "1e264c051d56f935bc504e15dfcd4313.jpg", 1333 | "content_type": "image/jpeg", 1334 | "updated_at": "2017-11-19T01:03:51.154Z", 1335 | "thumb": { 1336 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439489/thumb_1e264c051d56f935bc504e15dfcd4313.jpg" 1337 | }, 1338 | "square": { 1339 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439489/square_1e264c051d56f935bc504e15dfcd4313.jpg" 1340 | }, 1341 | "display": { 1342 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439489/display_1e264c051d56f935bc504e15dfcd4313.jpg" 1343 | }, 1344 | "large": { 1345 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439489/large_1e264c051d56f935bc504e15dfcd4313.jpg" 1346 | }, 1347 | "original": { 1348 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439489/original_1e264c051d56f935bc504e15dfcd4313.jpg", 1349 | "file_size": 295811, 1350 | "file_size_display": "289 KB" 1351 | } 1352 | } 1353 | }, 1354 | { 1355 | "title": "PCH", 1356 | "created_at": "2017-11-19T01:27:32.382Z", 1357 | "image": { 1358 | "filename": "4c27b9b3fa0fcbe28de320de332282cc.jpg", 1359 | "content_type": "image/jpeg", 1360 | "updated_at": "2017-11-19T01:27:32.751Z", 1361 | "thumb": { 1362 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439557/thumb_4c27b9b3fa0fcbe28de320de332282cc.jpg" 1363 | }, 1364 | "square": { 1365 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439557/square_4c27b9b3fa0fcbe28de320de332282cc.jpg" 1366 | }, 1367 | "display": { 1368 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439557/display_4c27b9b3fa0fcbe28de320de332282cc.jpg" 1369 | }, 1370 | "large": { 1371 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439557/large_4c27b9b3fa0fcbe28de320de332282cc.jpg" 1372 | }, 1373 | "original": { 1374 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439557/original_4c27b9b3fa0fcbe28de320de332282cc.jpg", 1375 | "file_size": 268454, 1376 | "file_size_display": "262 KB" 1377 | } 1378 | } 1379 | }, 1380 | { 1381 | "title": "PCH", 1382 | "created_at": "2017-11-19T01:35:01.272Z", 1383 | "image": { 1384 | "filename": "21cff96fe2027fabf8281e1494f39d97.jpg", 1385 | "content_type": "image/jpeg", 1386 | "updated_at": "2017-11-19T01:35:01.663Z", 1387 | "thumb": { 1388 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439573/thumb_21cff96fe2027fabf8281e1494f39d97.jpg" 1389 | }, 1390 | "square": { 1391 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439573/square_21cff96fe2027fabf8281e1494f39d97.jpg" 1392 | }, 1393 | "display": { 1394 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439573/display_21cff96fe2027fabf8281e1494f39d97.jpg" 1395 | }, 1396 | "large": { 1397 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439573/large_21cff96fe2027fabf8281e1494f39d97.jpg" 1398 | }, 1399 | "original": { 1400 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439573/original_21cff96fe2027fabf8281e1494f39d97.jpg", 1401 | "file_size": 487032, 1402 | "file_size_display": "476 KB" 1403 | } 1404 | } 1405 | }, 1406 | { 1407 | "title": "PACIFIC", 1408 | "created_at": "2017-11-19T01:41:37.823Z", 1409 | "image": { 1410 | "filename": "ea7d9d93aa3177a48df5e87629315084.jpg", 1411 | "content_type": "image/jpeg", 1412 | "updated_at": "2017-11-19T01:41:39.890Z", 1413 | "thumb": { 1414 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439580/thumb_ea7d9d93aa3177a48df5e87629315084.jpg" 1415 | }, 1416 | "square": { 1417 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439580/square_ea7d9d93aa3177a48df5e87629315084.jpg" 1418 | }, 1419 | "display": { 1420 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439580/display_ea7d9d93aa3177a48df5e87629315084.jpg" 1421 | }, 1422 | "large": { 1423 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439580/large_ea7d9d93aa3177a48df5e87629315084.jpg" 1424 | }, 1425 | "original": { 1426 | "url": "https://d2w9rnfcy7mm78.cloudfront.net/1439580/original_ea7d9d93aa3177a48df5e87629315084.jpg", 1427 | "file_size": 294441, 1428 | "file_size_display": "288 KB" 1429 | } 1430 | } 1431 | } 1432 | ] -------------------------------------------------------------------------------- /content/03-hang.json: -------------------------------------------------------------------------------- 1 | { 2 | "messages": [ 3 | { 4 | "name": "nice", 5 | "message": "ayyyy", 6 | "timestamp": "2018-02-23T19:56:04.533Z" 7 | }, 8 | { 9 | "name": "nice", 10 | "message": "whatup", 11 | "timestamp": "2018-02-23T19:56:17.401Z" 12 | }, 13 | { 14 | "name": "nice", 15 | "message": "is this enoki backend?", 16 | "timestamp": "2018-02-23T19:56:56.388Z" 17 | }, 18 | { 19 | "name": "nice", 20 | "message": "yea", 21 | "timestamp": "2018-02-23T19:57:03.644Z" 22 | }, 23 | { 24 | "name": "nice", 25 | "message": "whatd u do today", 26 | "timestamp": "2018-02-23T19:57:35.965Z" 27 | }, 28 | { 29 | "name": "nice", 30 | "message": "sweet, u ever looked into those smart garden systems?", 31 | "timestamp": "2018-02-23T19:58:38.644Z" 32 | }, 33 | { 34 | "name": "nice", 35 | "message": "just ordered 75 diff seeds for my summer garden!", 36 | "timestamp": "2018-02-23T19:59:21.636Z" 37 | }, 38 | { 39 | "name": "nice", 40 | "message": "will do a mini smart garden set up I think", 41 | "timestamp": "2018-02-23T19:59:36.733Z" 42 | }, 43 | { 44 | "name": "nice", 45 | "message": "simple monitoring", 46 | "timestamp": "2018-02-23T19:59:41.269Z" 47 | }, 48 | { 49 | "name": "nice", 50 | "message": "https://www.rareseeds.com/", 51 | "timestamp": "2018-02-23T20:00:17.932Z" 52 | }, 53 | { 54 | "name": "nice", 55 | "message": "https://www.are.na/francis-tseng/agricultural-tech", 56 | "timestamp": "2018-02-23T20:00:38.773Z" 57 | }, 58 | { 59 | "name": "nice", 60 | "message": "looks really nice outside", 61 | "timestamp": "2018-02-23T20:07:54.553Z" 62 | }, 63 | { 64 | "name": "nice", 65 | "message": "do you use prettier or anything like that?", 66 | "timestamp": "2018-02-23T20:08:31.539Z" 67 | }, 68 | { 69 | "name": "nice", 70 | "message": "good evening", 71 | "timestamp": "2018-02-23T20:16:55.938Z" 72 | }, 73 | { 74 | "name": "nice", 75 | "message": "hi", 76 | "timestamp": "2018-02-23T20:21:26.727Z" 77 | }, 78 | { 79 | "name": "nice", 80 | "message": "Which text editor is that?", 81 | "timestamp": "2018-02-23T20:20:23.422Z" 82 | }, 83 | { 84 | "name": "nice", 85 | "message": "sublime text, og", 86 | "timestamp": "2018-02-23T20:21:39.978Z" 87 | }, 88 | { 89 | "name": "nice", 90 | "message": "ah, so slick", 91 | "timestamp": "2018-02-23T20:21:54.440Z" 92 | }, 93 | { 94 | "name": "nice", 95 | "message": "great music selection – beatrice dillon is a favourite", 96 | "timestamp": "2018-02-23T20:23:48.333Z" 97 | }, 98 | { 99 | "name": "nice", 100 | "message": "u ever thinking about switching off twitch for livestreaming?", 101 | "timestamp": "2018-02-23T20:23:52.967Z" 102 | }, 103 | { 104 | "name": "nice", 105 | "message": "is the choo code run on the server or at runtime?", 106 | "timestamp": "2018-02-23T20:26:09.298Z" 107 | }, 108 | { 109 | "name": "nice", 110 | "message": "ah yes, thanks for the explanation ", 111 | "timestamp": "2018-02-23T20:27:48.077Z" 112 | }, 113 | { 114 | "name": "nice", 115 | "message": "that'd be great @ the static html", 116 | "timestamp": "2018-02-23T20:28:05.469Z" 117 | }, 118 | { 119 | "name": "nice", 120 | "message": "thats a pretty interesting thought actually ", 121 | "timestamp": "2018-02-23T20:32:09.828Z" 122 | }, 123 | { 124 | "name": "nice", 125 | "message": "pure speed vs. easing someone into an experience ", 126 | "timestamp": "2018-02-23T20:32:37.061Z" 127 | }, 128 | { 129 | "name": "nice", 130 | "message": "less layers of abstraction and it being minimal/understandable seems more important that moderately faster sites ", 131 | "timestamp": "2018-02-23T20:34:54.598Z" 132 | }, 133 | { 134 | "name": "nice", 135 | "message": "hello from louis & morgan", 136 | "timestamp": "2018-02-23T20:39:55.553Z" 137 | }, 138 | { 139 | "name": "nice", 140 | "message": "is this a dial in show?", 141 | "timestamp": "2018-02-23T20:41:09.837Z" 142 | }, 143 | { 144 | "name": "nice", 145 | "message": "hello", 146 | "timestamp": "2018-02-23T20:41:33.051Z" 147 | }, 148 | { 149 | "name": "nice", 150 | "message": "where's the phone number marquee", 151 | "timestamp": "2018-02-23T20:41:44.220Z" 152 | }, 153 | { 154 | "name": "nice", 155 | "message": "would beaker ever bundle this app?", 156 | "timestamp": "2018-02-23T20:42:37.877Z" 157 | }, 158 | { 159 | "name": "nice", 160 | "message": "included in beaker itself, without having to get it from somewhere else.", 161 | "timestamp": "2018-02-23T20:43:22.871Z" 162 | }, 163 | { 164 | "name": "nice", 165 | "message": "chrome has an add-on store tho", 166 | "timestamp": "2018-02-23T20:45:47.681Z" 167 | }, 168 | { 169 | "name": "nice", 170 | "message": "have you done a demo in-stream of the app yet? morgan not seen it yet.", 171 | "timestamp": "2018-02-23T20:47:16.014Z" 172 | }, 173 | { 174 | "name": "nice", 175 | "message": "is that your own css utility classes?", 176 | "timestamp": "2018-02-23T21:06:00.178Z" 177 | }, 178 | { 179 | "name": "nice", 180 | "message": "ah - nice ", 181 | "timestamp": "2018-02-23T21:08:05.953Z" 182 | }, 183 | { 184 | "name": "nice", 185 | "message": "thanks! gr8 looks, yeah, handy", 186 | "timestamp": "2018-02-23T21:09:09.732Z" 187 | }, 188 | { 189 | "name": "nice", 190 | "message": "i know nothing about DAT, but are each of those unique dat URLs public?", 191 | "timestamp": "2018-02-23T21:39:43.461Z" 192 | }, 193 | { 194 | "name": "nice", 195 | "message": "interesting - thanks", 196 | "timestamp": "2018-02-23T21:42:33.666Z" 197 | }, 198 | { 199 | "name": "nice", 200 | "message": "a whole new world....", 201 | "timestamp": "2018-02-23T21:42:38.830Z" 202 | }, 203 | { 204 | "name": "nice", 205 | "message": "https://peer-to-peer-web.com/berlin", 206 | "timestamp": "2018-02-23T21:43:14.456Z" 207 | }, 208 | { 209 | "name": "nice", 210 | "message": "awesome, will check out!", 211 | "timestamp": "2018-02-23T21:43:55.723Z" 212 | }, 213 | { 214 | "name": "nice", 215 | "message": "Berlin day was fun! hello to anyone here who attended", 216 | "timestamp": "2018-02-23T21:44:16.331Z" 217 | }, 218 | { 219 | "name": "nice", 220 | "message": "exciting times for p2p", 221 | "timestamp": "2018-02-23T21:45:39.388Z" 222 | }, 223 | { 224 | "name": "nice", 225 | "message": "agree on berlin. heya!", 226 | "timestamp": "2018-02-23T21:46:04.247Z" 227 | }, 228 | { 229 | "name": "nice", 230 | "message": "mind sharing the track currently running?", 231 | "timestamp": "2018-02-23T21:47:14.897Z" 232 | }, 233 | { 234 | "name": "nice", 235 | "message": "thx!", 236 | "timestamp": "2018-02-23T21:47:38.301Z" 237 | }, 238 | { 239 | "name": "nice", 240 | "message": "i think its aught", 241 | "timestamp": "2018-02-23T21:47:38.991Z" 242 | }, 243 | { 244 | "name": "nice", 245 | "message": "https://aught.bandcamp.com/album/07", 246 | "timestamp": "2018-02-23T21:47:49.197Z" 247 | } 248 | ] 249 | } -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Hang 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 51 | 52 | 53 |
sans
54 |
mono
55 | 56 | 57 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stream", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "src/index.js", 6 | "scripts": { 7 | "start": "budo src/index.js:bundles/bundle.js -P --ssl -d . -- -t sheetify -p [ css-extract -o bundles/bundle.css ]", 8 | "build": "browserify src/index.js -o bundles/bundle.js -t yo-yoify -t [ sheetify -u sheetify-cssnext ] -g es2040 -p [ css-extract -o bundles/bundle.css ] -p tinyify" 9 | }, 10 | "keywords": [], 11 | "author": "Jon-Kyle (http://jon-kyle.com)", 12 | "license": "ISC", 13 | "dependencies": { 14 | "bel": "^5.1.3", 15 | "choo": "^6.4.2", 16 | "choo-log": "^7.2.1", 17 | "gr8": "^3.1.3", 18 | "markdown-it": "^8.4.0", 19 | "markdown-it-external-links": "0.0.6", 20 | "nanocomponent": "^6.4.2", 21 | "ress": "^1.2.2", 22 | "ws": "^3.2.0", 23 | "xhr": "^2.4.0", 24 | "xtend": "^4.0.1" 25 | }, 26 | "devDependencies": { 27 | "bankai": "^9.11.1", 28 | "browserify": "^16.2.2", 29 | "css-extract": "^1.3.0", 30 | "es2040": "^1.2.6", 31 | "sheetify": "^7.3.2", 32 | "sheetify-cssnext": "^2.0.0", 33 | "tinyify": "^2.4.3", 34 | "yo-yoify": "^4.3.0" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # live 2 | 3 | a place for me to livestream .little websocket server is [hosted on glitch](https://glitch.com/edit/#!/plucky-basin?path=server.js:1:1). -------------------------------------------------------------------------------- /src/components/channel.js: -------------------------------------------------------------------------------- 1 | var html = require('choo/html') 2 | 3 | module.exports = channel 4 | 5 | function channel (props) { 6 | return html` 7 |
8 | 17 |
18 | ` 19 | } -------------------------------------------------------------------------------- /src/components/chat.js: -------------------------------------------------------------------------------- 1 | var markdown = require('markdown-it') 2 | var html = require('choo/html') 3 | var raw = require('bel/raw') 4 | 5 | var md = new markdown() 6 | 7 | module.exports = chat 8 | 9 | function chat (state, emit) { 10 | return html` 11 |
12 |
13 | ${state.chat.messages.map(elMessage)} 14 |
15 |
16 | ${elInput()} 17 |
18 |
19 | ` 20 | 21 | function elInput () { 22 | return html` 23 | 30 | ` 31 | } 32 | 33 | function elMessage (data) { 34 | return html` 35 |
36 | ${raw(md.render(data.message))} 37 |
38 | ` 39 | } 40 | 41 | function handleInput (event) { 42 | emit(state.events.CHAT_USER, { 43 | message: event.target.value 44 | }) 45 | } 46 | 47 | function handleSubmit (event) { 48 | emit(state.events.CHAT_SEND, state.chat.user) 49 | event.preventDefault() 50 | } 51 | } -------------------------------------------------------------------------------- /src/components/walk.js: -------------------------------------------------------------------------------- 1 | var Nanocomponent = require('nanocomponent') 2 | var html = require('choo/html') 3 | var css = require('sheetify') 4 | var xhr = require('xhr') 5 | 6 | var style = css` 7 | .line { height: 1px; background: #000; } 8 | .photo { width: 33.3% } 9 | .photo:hover { z-index: 2; width: 100%; left: 0!important; } 10 | .blink { 11 | animation: blink 500ms steps(1, end) infinite; 12 | } 13 | 14 | @keyframes blink { 15 | 0% { opacity: 0; } 16 | 50% { opacity: 1; } 17 | } 18 | 19 | ` 20 | 21 | module.exports = class Walk extends Nanocomponent { 22 | constructor () { 23 | super() 24 | 25 | this.tick 26 | this.state = { 27 | api: 'https://api.are.na/v2/channels/walk-17-11-18', 28 | contents: [ ], 29 | timeline: { 30 | start: '2017-11-18T20:00:00.216Z', 31 | end: '2017-11-19T04:00:00.216Z', 32 | heightHour: 1000 33 | } 34 | } 35 | 36 | this.refresh = this.refresh.bind(this) 37 | } 38 | 39 | load () { 40 | this.refresh() 41 | this.tick = setInterval(this.refresh, 1000 * 60) 42 | } 43 | 44 | unload () { 45 | clearInterval(this.tick) 46 | } 47 | 48 | refresh () { 49 | var self = this 50 | window.scrollTo(0, window.scrollY + 16) 51 | xhr(this.state.api + '?' + new Date().getTime() / 1000, function (err, resp) { 52 | if (err) throw err 53 | var data = JSON.parse(resp.body, { }, 2) 54 | self.state.contents = data.contents.map(function (entry) { 55 | entry.left = Math.random() * 75 56 | return entry 57 | }) 58 | self.rerender() 59 | }) 60 | } 61 | 62 | scroll () { 63 | 64 | } 65 | 66 | createElement (props) { 67 | var self = this 68 | var timeNow = new Date().getTime() / 1000 69 | var timeStart = new Date(this.state.timeline.start).getTime() / 1000 70 | var timeEnd = new Date(this.state.timeline.end).getTime() / 1000 71 | var startHour = new Date(this.state.timeline.start).getHours() 72 | var hours = (timeEnd - timeStart) / (1000 * 60 * 60) * 1000 73 | var height = hours * this.state.timeline.heightHour 74 | var positionNow = ((timeNow - timeStart) / (timeEnd - timeStart) * hours) * self.state.timeline.heightHour 75 | 76 | return html` 77 |
78 | 81 |
82 | ${Array(hours).fill(null).map(function (hour, i) { 83 | return html` 84 |
88 |
${i + startHour}:00pst
89 |
90 |
91 |
92 |
93 |
94 | ` 95 | })} 96 |
97 |
98 | ${this.state.contents.map(function (entry) { 99 | if (!entry.image) return 100 | var timeEntry = new Date(entry.created_at).getTime() / 1000 101 | var position = ((timeEntry - timeStart) / (timeEnd - timeStart) * hours) * self.state.timeline.heightHour 102 | return html` 103 |
107 | 108 |
${entry.title}
109 |
110 | ` 111 | })} 112 |
113 | ` 114 | } 115 | 116 | update () { 117 | return false 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /src/components/wrapper.js: -------------------------------------------------------------------------------- 1 | var html = require('choo/html') 2 | 3 | module.exports = wrapper 4 | 5 | function wrapper (view) { 6 | return function (state, emit) { 7 | return html` 8 | 9 | ${view(state, emit)} 10 | 11 | ` 12 | } 13 | } -------------------------------------------------------------------------------- /src/design.js: -------------------------------------------------------------------------------- 1 | var gr8 = require('gr8') 2 | var utils = [ ] 3 | 4 | var typography = { 5 | sans: '"Lars Mono", Menlo, Consolas, "Liberation Mono", Menlo, Courier, monospace' 6 | } 7 | 8 | var colors = { 9 | white: '#fff', 10 | grey_15: '#eee', 11 | grey_20: '#ccc', 12 | grey_75: '#333', 13 | red: '#f33', 14 | green: '#0FCE83', 15 | black: '#000' 16 | } 17 | 18 | var custom = ` 19 | html { font-size: 100% } 20 | 21 | input { outline: 0 } 22 | 23 | .md h1, 24 | .md h2, 25 | .md h3 { 26 | font-size: 1rem; 27 | font-weight: normal; 28 | } 29 | 30 | .md > *+* { 31 | margin-top: 1rem; 32 | margin-bottom: 1rem; 33 | } 34 | 35 | .md ul { margin-left: 1rem } 36 | .md ul li { margin: 0; padding: 0; } 37 | 38 | .md h1:before { content: '# ' } 39 | .md h2:before { content: '## ' } 40 | .md h3:before { content: '### ' } 41 | 42 | code, 43 | pre { 44 | background: #333; 45 | border-radius: 3px; 46 | font-family: ${typography.sans}; 47 | line-height: 1.5; 48 | } 49 | 50 | .md .external-link:after { 51 | content: '→'; 52 | display: inline-block; 53 | transform: rotate(-45deg); 54 | text-decoration: none; 55 | } 56 | 57 | code { 58 | padding: 0.25rem; 59 | } 60 | 61 | pre { 62 | padding: 1rem; 63 | } 64 | 65 | @font-face { 66 | font-family: 'Lars Mono'; 67 | src: url('/assets/Lars-Mono.eot'); 68 | src: url('/assets/Lars-Mono.eot?#iefix') format('embedded-opentype'), 69 | url('/assets/Lars-Mono.woff2') format('woff2'), 70 | url('/assets/Lars-Mono.woff') format('woff'); 71 | } 72 | ` 73 | 74 | var borderWeights = [1] 75 | var borders = {} 76 | borderWeights.forEach(border => { 77 | Object.keys(colors).forEach(key => { 78 | borders[border + '-' + key] = `${border}px solid ${colors[key]}` 79 | }) 80 | }) 81 | 82 | utils.push({ 83 | prop: [ 84 | 'border', 85 | 'border-top', 86 | 'border-right', 87 | 'border-bottom', 88 | 'border-left' 89 | ], 90 | vals: borders 91 | }) 92 | 93 | utils.push({ 94 | prop: { bgc: 'background-color' }, 95 | join: '-', 96 | vals: colors 97 | }) 98 | 99 | utils.push({ 100 | prop: { fc: 'color' }, 101 | join: '-', 102 | vals: colors 103 | }) 104 | 105 | utils.push({ 106 | prop: { fc: 'color' }, 107 | tail: ' a', 108 | join: '-', 109 | vals: colors 110 | }) 111 | 112 | utils.push({ 113 | prop: 'border-radius', 114 | unit: 'rem', 115 | vals: [0, 1, 1.5] 116 | }) 117 | 118 | utils.push({ 119 | prop: 'font-family', 120 | join: '-', 121 | vals: typography 122 | }) 123 | 124 | var gr8css = gr8({ 125 | utils: utils, 126 | spacing: [0, 0.5, 1, 1.5, 2], 127 | responsive: true, 128 | breakpointSelector: 'class' 129 | }) 130 | 131 | module.exports = gr8css + custom -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | var choo = require('choo') 2 | var html = require('choo/html') 3 | var css = require('sheetify') 4 | var wrapper = require('./components/wrapper') 5 | 6 | var app = choo() 7 | 8 | css('ress/ress.css') 9 | css('./design.js') 10 | 11 | app.use(require('./stores/app')) 12 | app.use(require('./stores/chat')) 13 | 14 | app.route('*', wrapper(require('./views/main'))) 15 | app.route('/', wrapper(require('./views/main'))) 16 | app.route('/stream', wrapper(require('./views/hang'))) 17 | app.route('/chat', wrapper(require('./views/chat'))) 18 | 19 | 20 | if (module.parent) module.exports = app 21 | else app.mount('body') -------------------------------------------------------------------------------- /src/lib/ws.js: -------------------------------------------------------------------------------- 1 | var ws = null 2 | 3 | if (typeof WebSocket !== 'undefined') { 4 | ws = WebSocket 5 | } else if (typeof MozWebSocket !== 'undefined') { 6 | ws = MozWebSocket 7 | } else { 8 | if (typeof window !== 'undefined') { 9 | ws = window.WebSocket || window.MozWebSocket 10 | } 11 | } 12 | 13 | module.exports = ws -------------------------------------------------------------------------------- /src/stores/app.js: -------------------------------------------------------------------------------- 1 | module.exports = app 2 | 3 | function app (state, emitter) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/stores/chat.js: -------------------------------------------------------------------------------- 1 | var WebSocket = require('../lib/ws') 2 | var xtend = require('xtend') 3 | var xhr = require('xhr') 4 | 5 | module.exports = chat 6 | 7 | function chat (state, emitter) { 8 | var ws 9 | state.chat = { 10 | address: 'wss://jk-hang.glitch.me/', 11 | http: 'https://jk-hang.glitch.me?' + Math.floor(new Date () / 1000), 12 | active: false, 13 | live: false, 14 | note: 'loading', 15 | messages: [ ], 16 | scratch: '', 17 | editing: false, 18 | user: { 19 | name: 'nice', 20 | message: '' 21 | } 22 | } 23 | 24 | state.events.CHAT_READY = 'chat:ready' 25 | state.events.CHAT_SEND = 'chat:send' 26 | state.events.CHAT_MESSAGE = 'chat:message' 27 | state.events.CHAT_USER = 'chat:user' 28 | state.events.CHAT_SCRATCH = 'chat:scratch' 29 | state.events.CHAT_LIVE = 'chat:live' 30 | 31 | emitter.on(state.events.DOMCONTENTLOADED, function () { 32 | ws = new WebSocket(state.chat.address) 33 | 34 | ws.addEventListener('open', function (event) { 35 | state.chat.active = true 36 | emitter.emit(state.events.CHAT_READY) 37 | emitter.emit(state.events.RENDER) 38 | 39 | setTimeout(function () { 40 | if (state.chat.live) { 41 | var elMessages = document.querySelector('[data-messages]') 42 | elMessages.scrollTo(0, elMessages.scrollHeight) 43 | } 44 | }, 100) 45 | }) 46 | 47 | ws.addEventListener('error', function (event) { 48 | console.warn('ws can not connect', event) 49 | xhr(state.chat.http, function (err, res, body) { 50 | try { 51 | var data = JSON.parse(body) 52 | state.chat = xtend(state.chat, data) 53 | } catch (err) { } 54 | state.chat.loaded = true 55 | emitter.emit(state.events.RENDER) 56 | }) 57 | }) 58 | 59 | ws.addEventListener('message', function (event) { 60 | var data = JSON.parse(event.data) 61 | 62 | // active 63 | if (data.live !== undefined) { 64 | state.chat.live = data.live 65 | } 66 | 67 | if (data.note) { 68 | state.chat.note = data.note 69 | } 70 | 71 | // scratch 72 | if (!state.chat.editing && data.scratch !== undefined) { 73 | state.chat.scratch = data.scratch 74 | if (state.chat.live) scrollMessages('[data-scratch]') 75 | } 76 | 77 | // messages 78 | if (data.messages) { 79 | state.chat.messages = state.chat.messages.concat(data.messages) 80 | } 81 | 82 | // message 83 | if (data.message) { 84 | state.chat.messages.push(data) 85 | if (state.chat.live) scrollMessages('[data-messages]') 86 | if (data.message === state.chat.user.message) { 87 | emitter.emit(state.events.CHAT_USER, { message: '' }) 88 | } 89 | } 90 | 91 | emitter.emit(state.events.CHAT_MESSAGE) 92 | emitter.emit(state.events.RENDER) 93 | }) 94 | }) 95 | 96 | emitter.on(state.events.CHAT_SEND, function (data) { 97 | if (data && data.name && data.message) { 98 | data.timestamp = new Date() 99 | ws.send(JSON.stringify(data)) 100 | } 101 | }) 102 | 103 | emitter.on(state.events.CHAT_SCRATCH, function (data) { 104 | if (data && data.scratch) { 105 | state.chat.editing = true 106 | state.chat.scratch = data.scratch 107 | ws.send(JSON.stringify(data)) 108 | } 109 | }) 110 | 111 | emitter.on(state.events.CHAT_LIVE, function (data) { 112 | if (data && data.live !== undefined) { 113 | state.chat.live = data.live 114 | data.pwd = 'niceone' 115 | ws.send(JSON.stringify(data)) 116 | } 117 | }) 118 | 119 | emitter.on(state.events.CHAT_USER, function (data) { 120 | if (!data) return 121 | state.chat.user = xtend(state.chat.user, data) 122 | emitter.emit(state.events.RENDER) 123 | }) 124 | 125 | emitter.on(state.events.CHAT_MESSAGE, function (data) { 126 | 127 | }) 128 | } 129 | 130 | function scrollMessages (selector) { 131 | if (typeof document !== 'undefined') { 132 | var elMessages = document.querySelector(selector) 133 | if (!elMessages) return 134 | 135 | if (elMessages.scrollHeight - elMessages.offsetHeight === elMessages.scrollTop) { 136 | setTimeout(function () { 137 | var elMessages = document.querySelector(selector) 138 | elMessages.scrollTo(0, elMessages.scrollHeight) 139 | }, 100) 140 | } 141 | } 142 | } -------------------------------------------------------------------------------- /src/views/break.js: -------------------------------------------------------------------------------- 1 | var html = require('choo/html') 2 | var css = require('sheetify') 3 | 4 | var style = css` 5 | :host { 6 | max-width: 24rem; 7 | } 8 | ` 9 | 10 | module.exports = view 11 | 12 | function view (state, emit) { 13 | return html` 14 |
15 |
16 | ${getNote()} 17 |
18 |
19 | ` 20 | 21 | function getNote () { 22 | return ':)' 23 | // return state.chat && state.chat.messages.length > 0 24 | // ? state.chat.messages[state.chat.messages.length - 1].message 25 | // : ':)' 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/views/chat.js: -------------------------------------------------------------------------------- 1 | var html = require('choo/html') 2 | var chat = require('../components/chat') 3 | 4 | module.exports = view 5 | 6 | function view (state, emit) { 7 | return html` 8 |
9 |
10 | ${state.chat.active ? chat(state, emit) : ''} 11 |
12 |
13 | ` 14 | } -------------------------------------------------------------------------------- /src/views/hang.js: -------------------------------------------------------------------------------- 1 | var externalLinks = require('markdown-it-external-links') 2 | var markdown = require('markdown-it') 3 | var html = require('choo/html') 4 | var raw = require('bel/raw') 5 | 6 | var channel = require('../components/channel') 7 | var chat = require('../components/chat') 8 | 9 | var md = new markdown() 10 | 11 | md.use(externalLinks, { 12 | externalTarget: ['_blank'] 13 | }) 14 | 15 | module.exports = view 16 | 17 | function view (state, emit) { 18 | return html` 19 |
20 |
21 | ${channel()} 22 | ${state.chat.active 23 | ? scratch({ text: state.chat.scratch }) 24 | : loading() 25 | } 26 |
27 |
28 | ${state.chat.active 29 | ? chat(state, emit) 30 | : loading() 31 | } 32 |
33 |
34 | ` 35 | } 36 | 37 | function loading () { 38 | return html` 39 |
40 |
41 | LOADING 42 |
43 |
44 | ` 45 | } 46 | 47 | function scratch (props) { 48 | props = props || { } 49 | return html` 50 |
51 | ${raw(md.render(props.text))} 52 |
53 | ` 54 | } -------------------------------------------------------------------------------- /src/views/main.js: -------------------------------------------------------------------------------- 1 | var html = require('choo/html') 2 | 3 | var intermission = require('./break') 4 | var walk = require('./walk') 5 | var hang = require('./hang') 6 | 7 | module.exports = main 8 | 9 | function main(state, emit) { 10 | // if (state.chat && state.chat.live) { 11 | return hang(state, emit) 12 | // } else { 13 | // return intermission(state, emit) 14 | // } 15 | } 16 | -------------------------------------------------------------------------------- /src/views/scratch-editor.js: -------------------------------------------------------------------------------- 1 | var html = require('choo/html') 2 | var css = require('sheetify') 3 | var raw = require('bel/raw') 4 | 5 | var chat = require('../components/chat') 6 | 7 | var style = css` 8 | :host { 9 | cursor: pointer; 10 | height: 2rem; 11 | width: 2rem; 12 | border-radius: 1rem; 13 | } 14 | ` 15 | 16 | module.exports = scratch 17 | 18 | function scratch (state, emit) { 19 | return html` 20 |
21 |
22 |
26 |
27 |
28 | ${editor()} 29 |
30 |
31 | ${chat(state, emit)} 32 |
33 |
34 | ` 35 | 36 | function editor () { 37 | return html` 38 | 43 | ` 44 | } 45 | 46 | function handleInput (event) { 47 | emit(state.events.CHAT_SCRATCH, { 48 | scratch: event.target.value 49 | }) 50 | } 51 | 52 | function handleLiveClick (event) { 53 | emit(state.events.CHAT_LIVE, { 54 | live: !state.chat.live 55 | }) 56 | } 57 | } -------------------------------------------------------------------------------- /src/views/walk.js: -------------------------------------------------------------------------------- 1 | var externalLinks = require('markdown-it-external-links') 2 | var markdown = require('markdown-it') 3 | var html = require('choo/html') 4 | var raw = require('bel/raw') 5 | 6 | var Walk = require('../components/walk') 7 | var chat = require('../components/chat') 8 | var walk = new Walk() 9 | 10 | module.exports = view 11 | 12 | function view (state, emit) { 13 | return html` 14 |
15 |
16 | ${walk.render()} 17 |
18 |
19 | ${state.chat.active 20 | ? chat(state, emit) 21 | : loading() 22 | } 23 |
24 |
25 | ` 26 | } 27 | 28 | function loading () { 29 | return html` 30 |
31 |
32 | LOADING 33 |
34 |
35 | ` 36 | } --------------------------------------------------------------------------------