Add CC licensing info, favicon, general cleanup
19
LICENSE
@ -1,19 +0,0 @@
|
|||||||
Copyright © 2021 Garrett Mills
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
copy of this software and associated documentation files (the “Software”),
|
|
||||||
to deal in the Software without restriction, including without limitation
|
|
||||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included
|
|
||||||
in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
DEALINGS IN THE SOFTWARE.
|
|
32
README.md
@ -1,31 +1,9 @@
|
|||||||
<center>
|
# `garrettmills.dev`
|
||||||
<br>
|
|
||||||
<img alt="The Extollo logo" src="https://static.garrettmills.dev/sites/extollo/docs/assets/logo/svg/Extollo-Icon-and-Text-LIGHT-Final.svg" height="150">
|
|
||||||
<br><br>
|
|
||||||
<b>extollo</b> - (v. <em>latin</em>) - to lift up, to elevate
|
|
||||||
<br><br>
|
|
||||||
Extollo is a <a href="https://www.gnu.org/philosophy/floss-and-foss.en.html" target="_blank">free & libre</a> application framework in TypeScript.
|
|
||||||
</center>
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
Built on principles of modularity, strict-typing, inversion-of-control, and developer ergonomics, Extollo enables developers to build maintainable, scalable, and expressive applications.
|
This is my website, hosted at https://garrettmills.dev.
|
||||||
|
|
||||||
Node.js provides an excellent platform for quickly getting an application up and running, but this loose minimalism can lead to larger, more unweildy code-bases as your application grows. Extollo fixes this by providing an opinionated, robust framework and first-party modules that provide, among other things:
|
It is implemented with my [Extollo framework](https://extollo.garrettmills.dev).
|
||||||
|
|
||||||
- Type-based dependency injection
|
![](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)
|
||||||
- Strongly-typed ORM with an expressive query-builder and models
|
|
||||||
- Customizable session & caching interfaces
|
|
||||||
- Modular, pre-compiled, nest-able routes
|
|
||||||
- First-party, extensible command line tools
|
|
||||||
- Unit-based application structure
|
|
||||||
|
|
||||||
## Getting Started
|
This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-nc-sa/4.0/).
|
||||||
Writing an application with Extollo is very straightforward if you are familiar with Node.js/TypeScript, or similar frameworks like Laravel.
|
|
||||||
|
|
||||||
Check out the [Getting Started](https://extollo.garrettmills.dev/pages/Documentation/Getting-Started.html) page on the documentation site for more information.
|
|
||||||
|
|
||||||
## License & Philosophy
|
|
||||||
The Extollo project is, and will always be, free & libre software. The framework itself is open-source available [here](https://code.garrettmills.dev/Extollo), and is licensed under the terms of the MIT license. See the LICENSE file for more information.
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
Have an improvement or fix to Extollo? Contributors are always welcome. See the CONTRIBUTING.md file for next steps.
|
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
DEBUG_MODE=true
|
|
||||||
EXTOLLO_LOGGING_LEVEL=6
|
|
||||||
DATABASE_PASSWORD=extollo
|
|
||||||
DATABASE_HOST=db01.platform.local
|
|
@ -1,4 +1,4 @@
|
|||||||
import { env } from "@extollo/lib";
|
import { env } from '@extollo/lib'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
connections: {
|
connections: {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import {OAuth2Client, OAuth2Scope, env, /*uuid4*/} from '@extollo/lib'
|
import {OAuth2Client, OAuth2Scope, env} from '@extollo/lib'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
secret: env('OAUTH2_SECRET'),
|
secret: env('OAUTH2_SECRET'),
|
||||||
@ -9,16 +9,5 @@ export default {
|
|||||||
description: 'access basic information about your account',
|
description: 'access basic information about your account',
|
||||||
},
|
},
|
||||||
} as {[key: string]: OAuth2Scope},
|
} as {[key: string]: OAuth2Scope},
|
||||||
clients: {
|
clients: {} as {[key: string]: OAuth2Client},
|
||||||
// 'test-1': {
|
|
||||||
// id: 'test-1',
|
|
||||||
// display: 'Test 1',
|
|
||||||
// secret: env('TEST_CLIENT_SECRET', uuid4()),
|
|
||||||
// allowedFlows: ['code'],
|
|
||||||
// allowedScopeIds: ['user-info'],
|
|
||||||
// allowedRedirectUris: [
|
|
||||||
// 'http://localhost:1234/callback',
|
|
||||||
// ],
|
|
||||||
// },
|
|
||||||
} as {[key: string]: OAuth2Client},
|
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import {
|
|||||||
RedisCache,
|
RedisCache,
|
||||||
CacheQueue,
|
CacheQueue,
|
||||||
BusConnectorConfig, QueueConfig, SyncQueue
|
BusConnectorConfig, QueueConfig, SyncQueue
|
||||||
} from "@extollo/lib"
|
} from '@extollo/lib'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
debug: env('DEBUG_MODE', false),
|
debug: env('DEBUG_MODE', false),
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import {Controller, view, Injectable, SecurityContext, Inject, Collection, Config, Routing} from '@extollo/lib'
|
import {Controller, view, Injectable, SecurityContext, Inject, Collection, Config, Routing, file, Application} from '@extollo/lib'
|
||||||
import {WorkItem} from '../../models/WorkItem.model'
|
import {WorkItem} from '../../models/WorkItem.model'
|
||||||
import {FeedPost} from '../../models/FeedPost.model'
|
import {FeedPost} from '../../models/FeedPost.model'
|
||||||
|
|
||||||
@ -75,4 +75,11 @@ export class Home extends Controller {
|
|||||||
|
|
||||||
return query.get().collect()
|
return query.get().collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
favicon() {
|
||||||
|
return file(
|
||||||
|
Application.getApplication()
|
||||||
|
.appPath('resources', 'assets', 'favicon', 'favicon.ico')
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,12 +36,9 @@ Route
|
|||||||
|
|
||||||
Route.any('/go/:short')
|
Route.any('/go/:short')
|
||||||
.calls<GoLinks>(GoLinks, go => go.launch)
|
.calls<GoLinks>(GoLinks, go => go.launch)
|
||||||
|
|
||||||
|
Route.get('/favicon.ico')
|
||||||
|
.calls<Home>(Home, home => home.favicon)
|
||||||
})
|
})
|
||||||
.pre(SessionAuthMiddleware)
|
.pre(SessionAuthMiddleware)
|
||||||
.pre(PageView)
|
.pre(PageView)
|
||||||
|
|
||||||
// Route.group('', () => {
|
|
||||||
// Route.get('/dash')
|
|
||||||
// .pre(AuthRequiredMiddleware)
|
|
||||||
// .calls<Home>(Home, home => home.welcome)
|
|
||||||
// }).pre(SessionAuthMiddleware)
|
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
import {Inject, Injectable, Logging, BaseJob} from '@extollo/lib'
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export default class LogMessage extends BaseJob {
|
|
||||||
@Inject()
|
|
||||||
protected readonly logging!: Logging
|
|
||||||
|
|
||||||
async execute(): Promise<void> {
|
|
||||||
this.logging.info('Executing LogMessage...')
|
|
||||||
await new Promise<void>(res => {
|
|
||||||
setTimeout(() => res(), 3000)
|
|
||||||
})
|
|
||||||
this.logging.success('The LogMessage job has executed!')
|
|
||||||
}
|
|
||||||
}
|
|
BIN
src/app/resources/assets/cc-by-nc-sa-small.png
Normal file
After Width: | Height: | Size: 467 B |
BIN
src/app/resources/assets/cc-by-nc-sa.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
src/app/resources/assets/favicon/android-chrome-192x192.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
src/app/resources/assets/favicon/android-chrome-512x512.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
src/app/resources/assets/favicon/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
src/app/resources/assets/favicon/favicon-16x16.png
Normal file
After Width: | Height: | Size: 327 B |
BIN
src/app/resources/assets/favicon/favicon-32x32.png
Normal file
After Width: | Height: | Size: 628 B |
BIN
src/app/resources/assets/favicon/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
1
src/app/resources/assets/favicon/site.webmanifest
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"name":"Garrett Mills | Developer, Speaker, Designer","short_name":"Garrett Mills","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
BIN
src/app/resources/assets/img/favicon.png
Normal file
After Width: | Height: | Size: 6.8 KiB |
@ -19,15 +19,24 @@ head
|
|||||||
link(rel="alternate" href="/feed/atom.xml" title="Garrett Mills - Posts & Updates" type="application/atom+xml")
|
link(rel="alternate" href="/feed/atom.xml" title="Garrett Mills - Posts & Updates" type="application/atom+xml")
|
||||||
link(rel="alternate" href="/feed/rss.xml" title="Garrett Mills - Posts & Updates" type="application/rss+xml")
|
link(rel="alternate" href="/feed/rss.xml" title="Garrett Mills - Posts & Updates" type="application/rss+xml")
|
||||||
|
|
||||||
|
link(rel='apple-touch-icon' sizes='180x180' href=asset('favicon/apple-touch-icon.png'))
|
||||||
|
link(rel='manifest' href=asset('favicon/site.webmanifest'))
|
||||||
|
link(rel='icon' type='image/png' sizes='32x32' href=asset('favicon/favicon-32x32.png'))
|
||||||
|
link(rel='icon' type='image/png' sizes='16x16' href=asset('favicon/favicon-16x16.png'))
|
||||||
|
link(rel='shortcut icon' href=asset('favicon/favicon.ico'))
|
||||||
|
|
||||||
body
|
body
|
||||||
block content
|
block content
|
||||||
|
|
||||||
footer
|
footer
|
||||||
.ff-tag(style="margin-right: 80px")
|
.ff-tag(style="margin-right: 80px")
|
||||||
a(href="https://www.mozilla.org/en-US/firefox/browsers/" target="_blank")
|
a(href="https://www.mozilla.org/en-US/firefox/browsers/" target="_blank")
|
||||||
img(src="/assets/ffox.png" width="75" style="margin-top: -1px")
|
img(src=asset('ffox.png') width="75" style="margin-top: -1px")
|
||||||
.by-line garrettmills
|
.by-line garrettmills
|
||||||
.copy#tagline(title="my, aren't you curious...") copyright © #{(new Date()).getFullYear()} garrett mills
|
.copy#tagline(title="my, aren't you curious...") copyright © #{(new Date()).getFullYear()} garrett mills
|
||||||
|
.copyright
|
||||||
|
a(href='https://creativecommons.org/licenses/by-nc-sa/4.0/' target='_blank')
|
||||||
|
img(src=asset('cc-by-nc-sa-small.png') title='This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License')
|
||||||
if false
|
if false
|
||||||
div.auth-container
|
div.auth-container
|
||||||
div.profile
|
div.profile
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
|
|
||||||
export interface UserLogin {
|
|
||||||
/**
|
|
||||||
* @minLength 1
|
|
||||||
* @maxLength 100
|
|
||||||
*/
|
|
||||||
username: string,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @minLength 1
|
|
||||||
* @maxLength 100
|
|
||||||
*/
|
|
||||||
password: string,
|
|
||||||
}
|
|