├── server ├── test │ └── mocha.opts ├── database │ ├── thingdb │ │ ├── test │ │ │ ├── mocha.opts │ │ │ ├── index.js │ │ │ ├── devarchy │ │ │ │ ├── index.js │ │ │ │ ├── thing.js │ │ │ │ ├── setup.js │ │ │ │ ├── playground.js │ │ │ │ └── population.js │ │ │ ├── features │ │ │ │ ├── setup.js │ │ │ │ ├── index.js │ │ │ │ ├── thing.js │ │ │ │ └── tests │ │ │ │ │ ├── details.js │ │ │ │ │ ├── migrations.js │ │ │ │ │ ├── loading.js │ │ │ │ │ ├── misc.js │ │ │ │ │ ├── uniqueness.js │ │ │ │ │ └── computed_props.js │ │ │ └── thing.js │ │ ├── validate │ │ │ ├── index.js │ │ │ └── load_props.js │ │ ├── debug │ │ │ ├── index.js │ │ │ ├── get_things_sync.js │ │ │ └── log.js │ │ ├── db_interface │ │ │ ├── load │ │ │ │ ├── events.js │ │ │ │ ├── index.js │ │ │ │ ├── things.js │ │ │ │ └── view.js │ │ │ └── index.js │ │ ├── interpolate │ │ │ ├── index.js │ │ │ ├── apply_defaults.js │ │ │ ├── apply_side_effects.js │ │ │ ├── compute_views.js │ │ │ └── compute_values.js │ │ ├── util │ │ │ ├── obj-path.js │ │ │ ├── deep-assign.js │ │ │ └── deep-equal.js │ │ ├── schema_common.js │ │ └── plugins │ │ │ └── serializer │ │ │ └── index.js │ ├── interactive.js │ ├── index.js │ └── connection.js ├── .logs │ └── placeholder ├── util │ ├── normalize_url.js │ ├── parse_markdown_catalog │ │ ├── util │ │ │ ├── options.js │ │ │ ├── log.js │ │ │ └── is_github_url.js │ │ ├── linear_processing │ │ │ ├── processors │ │ │ │ ├── index.js │ │ │ │ ├── github_entry.js │ │ │ │ ├── npm_entry.js │ │ │ │ └── web_entry.js │ │ │ └── apply_processors.js │ │ ├── tests │ │ │ └── test_description.md │ │ └── index.js │ ├── npm_package_name_validation.js │ ├── error_tracker.js │ ├── fetch_with_cache.js │ ├── b64_unicode.js │ ├── nodejs_hash.js │ ├── deepFreeze.js │ ├── env.js │ ├── turn_into_error_object.js │ ├── npm-api.js │ ├── multiline_tag.js │ ├── ensure_database_connection.js │ └── gitlab-api.js ├── http │ ├── config.js │ ├── static_dir.js │ ├── index.js │ ├── auth │ │ └── providers.js │ ├── log.js │ ├── http_cache.js │ └── client │ │ └── index.js ├── server_down.js ├── process.pm2.json ├── package.json └── index.js ├── client ├── src │ ├── js │ │ ├── components │ │ │ ├── snippets │ │ │ │ ├── vote-block │ │ │ │ │ ├── vote-block.css │ │ │ │ │ └── index.js │ │ │ │ ├── logo-devarchy │ │ │ │ │ ├── logo-devarchy.css │ │ │ │ │ ├── index.js │ │ │ │ │ └── logo-devarchy.jsx │ │ │ │ ├── loading │ │ │ │ │ ├── index.js │ │ │ │ │ ├── css-loader │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── css-loader.jsx │ │ │ │ │ │ └── css-loader.css │ │ │ │ │ ├── react-loader │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── react-loader.jsx │ │ │ │ │ │ └── react-loader.css │ │ │ │ │ └── loading.jsx │ │ │ │ ├── month-picker │ │ │ │ │ ├── month-picker.css │ │ │ │ │ ├── index.js │ │ │ │ │ └── month-picker.jsx │ │ │ │ ├── description-line │ │ │ │ │ ├── description-line.css │ │ │ │ │ ├── index.js │ │ │ │ │ └── description-line.jsx │ │ │ │ ├── comment-list │ │ │ │ │ ├── comment-list.css │ │ │ │ │ ├── index.js │ │ │ │ │ └── comment-list.jsx │ │ │ │ ├── icon │ │ │ │ │ ├── index.js │ │ │ │ │ └── icon.css │ │ │ │ ├── topic │ │ │ │ │ ├── index.js │ │ │ │ │ ├── topic.css │ │ │ │ │ └── topic.jsx │ │ │ │ ├── button │ │ │ │ │ ├── index.js │ │ │ │ │ └── button.css │ │ │ │ ├── category │ │ │ │ │ ├── index.js │ │ │ │ │ └── category.css │ │ │ │ ├── tag-list │ │ │ │ │ ├── index.js │ │ │ │ │ └── tag-list.css │ │ │ │ ├── progressbar │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── index.js │ │ │ │ │ └── progressbar.js │ │ │ │ ├── logo-section │ │ │ │ │ ├── index.js │ │ │ │ │ └── logo-section.css │ │ │ │ ├── social-buttons │ │ │ │ │ ├── index.js │ │ │ │ │ └── social-buttons.css │ │ │ │ ├── resource-line │ │ │ │ │ ├── index.js │ │ │ │ │ └── resource-line.css │ │ │ │ ├── resource-view │ │ │ │ │ ├── index.js │ │ │ │ │ └── resource-view.css │ │ │ │ ├── markdown-list-view │ │ │ │ │ ├── index.js │ │ │ │ │ └── markdown-list-view.css │ │ │ │ ├── reviewpoint-list │ │ │ │ │ ├── index.js │ │ │ │ │ ├── reviewpoint-list.css │ │ │ │ │ └── reviewpoint-list.jsx │ │ │ │ ├── resource-details │ │ │ │ │ ├── index.js │ │ │ │ │ └── resource-details.css │ │ │ │ ├── eraser.jsx │ │ │ │ ├── user.jsx │ │ │ │ ├── login-required.jsx │ │ │ │ ├── resource-request-list.jsx │ │ │ │ ├── resource-list.jsx │ │ │ │ ├── userinfo.jsx │ │ │ │ ├── catalog-title.jsx │ │ │ │ ├── tag-resources-view.jsx │ │ │ │ └── popular-board.jsx │ │ │ ├── pages │ │ │ │ ├── landing │ │ │ │ │ ├── index.js │ │ │ │ │ ├── landing.css │ │ │ │ │ └── landing.jsx │ │ │ │ ├── needs-and-libs │ │ │ │ │ ├── index.js │ │ │ │ │ └── needs-and-libs.css │ │ │ │ ├── not-found-404.jsx │ │ │ │ ├── about.jsx │ │ │ │ └── redirect-catch.jsx │ │ │ └── mixins │ │ │ │ ├── reply-layout │ │ │ │ ├── index.js │ │ │ │ └── reply-layout.css │ │ │ │ ├── flip-list.jsx │ │ │ │ ├── render-canceler.jsx │ │ │ │ ├── collapse.jsx │ │ │ │ └── collapsable-adder.jsx │ │ ├── thing │ │ │ ├── index.js │ │ │ ├── comment.js │ │ │ ├── genericvote.js │ │ │ ├── reviewpoint.js │ │ │ ├── user.js │ │ │ └── mixins │ │ │ │ └── commentable.js │ │ ├── rerender.js │ │ ├── util │ │ │ ├── debouncer.js │ │ │ ├── server_uri.js │ │ │ ├── normalize_url.js │ │ │ ├── npm_package_name_validation.js │ │ │ ├── route_spec.js │ │ │ ├── pretty_print.js │ │ │ └── http.js │ │ ├── navigation.js │ │ └── router.js │ ├── img │ │ └── logo.png │ ├── css │ │ ├── reset.css │ │ ├── layout.vars.css │ │ ├── colors.css │ │ ├── index.css │ │ ├── loading.css │ │ ├── colors.vars.css │ │ ├── scroll.css │ │ ├── tag.css │ │ ├── style.css │ │ ├── sidebar.css │ │ ├── form.css │ │ ├── layout.css │ │ └── text.css │ ├── font │ │ ├── muli_300.woff2 │ │ ├── cutive_mono.woff2 │ │ └── open_sans_400.woff2 │ └── index.ejs └── package.json ├── readme.md ├── .gitignore ├── dev.sh └── production.sh /server/test/mocha.opts: -------------------------------------------------------------------------------- 1 | --bail 2 | -------------------------------------------------------------------------------- /server/database/thingdb/test/mocha.opts: -------------------------------------------------------------------------------- 1 | --bail 2 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/vote-block/vote-block.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | Source code of [devarchy](http://devarchy.com/). 2 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/logo-devarchy/logo-devarchy.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/.logs/placeholder: -------------------------------------------------------------------------------- 1 | placeholder to commit the .logs directory 2 | -------------------------------------------------------------------------------- /server/util/normalize_url.js: -------------------------------------------------------------------------------- 1 | ../../client/src/js/util/normalize_url.js -------------------------------------------------------------------------------- /server/util/parse_markdown_catalog/util/options.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /client/src/js/thing/index.js: -------------------------------------------------------------------------------- 1 | import Thing from './thing'; 2 | 3 | export default Thing; 4 | -------------------------------------------------------------------------------- /server/database/thingdb/test/index.js: -------------------------------------------------------------------------------- 1 | require('./features'); 2 | require('./devarchy'); 3 | -------------------------------------------------------------------------------- /client/src/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devarchy/website/HEAD/client/src/img/logo.png -------------------------------------------------------------------------------- /server/util/npm_package_name_validation.js: -------------------------------------------------------------------------------- 1 | ../../client/src/js/util/npm_package_name_validation.js -------------------------------------------------------------------------------- /client/src/css/reset.css: -------------------------------------------------------------------------------- 1 | html.css_da { 2 | & * { 3 | box-sizing: border-box; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /client/src/font/muli_300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devarchy/website/HEAD/client/src/font/muli_300.woff2 -------------------------------------------------------------------------------- /client/src/font/cutive_mono.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devarchy/website/HEAD/client/src/font/cutive_mono.woff2 -------------------------------------------------------------------------------- /client/src/font/open_sans_400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devarchy/website/HEAD/client/src/font/open_sans_400.woff2 -------------------------------------------------------------------------------- /client/src/js/components/snippets/loading/index.js: -------------------------------------------------------------------------------- 1 | export * from './loading.jsx'; 2 | export {default} from './loading.jsx'; 3 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/month-picker/month-picker.css: -------------------------------------------------------------------------------- 1 | .css_react_month_picker .overlay { 2 | display: none; 3 | } 4 | -------------------------------------------------------------------------------- /server/database/thingdb/validate/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./thing'); 2 | module.exports.load_props = require('./load_props'); 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | npm-debug.log* 4 | yarn-error.log 5 | /.env 6 | /server/bot 7 | /server/.logs/* 8 | !/server/.logs/placeholder 9 | -------------------------------------------------------------------------------- /server/database/thingdb/test/devarchy/index.js: -------------------------------------------------------------------------------- 1 | require('./tests/markdown_translation'); 2 | require('./tests/frontend'); 3 | require('./tests/schema'); 4 | -------------------------------------------------------------------------------- /server/database/interactive.js: -------------------------------------------------------------------------------- 1 | r = require("repl").start("Thing> "); 2 | r.context.Thing = require('./'); 3 | r.context.Promise_serial = require('promise-serial'); 4 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/description-line/description-line.css: -------------------------------------------------------------------------------- 1 | .css_line_component { 2 | @nest 3 | & + & { 4 | margin-left: 9px; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/comment-list/comment-list.css: -------------------------------------------------------------------------------- 1 | .css_comment + .css_comment, 2 | .css_comment_replies { 3 | /* 4 | padding-top: 4px; 5 | */ 6 | } 7 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/description-line/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require ('./description-line.css'); 2 | export * from './description-line.jsx'; 3 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/icon/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require('./icon.css'); 2 | export {default} from './icon.jsx'; 3 | export * from './icon.jsx'; 4 | -------------------------------------------------------------------------------- /client/src/js/components/pages/landing/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require ('./landing.css'); 2 | export * from './landing.jsx'; 3 | export {default} from './landing.jsx'; 4 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/topic/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require('./topic.css'); 2 | export {default} from './topic.jsx'; 3 | export * from './topic.jsx'; 4 | 5 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/button/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require ('./button.css'); 2 | export * from './button.jsx'; 3 | export {default} from './button.jsx'; 4 | 5 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/category/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require('./category.css'); 2 | export * from './category.jsx'; 3 | export {default} from './category.jsx'; 4 | -------------------------------------------------------------------------------- /server/database/thingdb/test/devarchy/thing.js: -------------------------------------------------------------------------------- 1 | module.exports = require('../thing')({ 2 | database_name: 'devarchy__tests__devarchy', 3 | schema: require('../../../schema.js'), 4 | }); 5 | -------------------------------------------------------------------------------- /client/src/css/layout.vars.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --css_sidebar_width: 240px; 3 | --css_header_height: 116px; 4 | --sel_resource_view_width: 600px; 5 | --css_layout_transition: 0.7s; 6 | } 7 | -------------------------------------------------------------------------------- /server/database/thingdb/debug/index.js: -------------------------------------------------------------------------------- 1 | const log = require('./log'); 2 | const get_things_sync = require('./get_things_sync'); 3 | 4 | module.exports = { 5 | log, 6 | get_things_sync, 7 | }; 8 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/tag-list/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require ('./tag-list.css'); 2 | export * from './tag-list.jsx'; 3 | export {default} from './tag-list.jsx'; 4 | 5 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/vote-block/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require ('./vote-block.css'); 2 | export * from './vote-block.jsx'; 3 | export {default} from './vote-block.jsx'; 4 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/progressbar/progressbar.css: -------------------------------------------------------------------------------- 1 | @import 'nprogress/nprogress.css'; 2 | 3 | #nprogress { 4 | z-index: 99999; 5 | filter: grayscale(1) contrast(200%) brightness(1); 6 | } 7 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/comment-list/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require('./comment-list.css'); 2 | export * from './comment-list.jsx'; 3 | export {default} from './comment-list.jsx'; 4 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/loading/css-loader/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require('./css-loader.css'); 2 | export * from './css-loader.jsx'; 3 | export {default} from './css-loader.jsx'; 4 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/logo-section/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require ('./logo-section.css'); 2 | export * from './logo-section.jsx'; 3 | export {default} from './logo-section.jsx'; 4 | -------------------------------------------------------------------------------- /client/src/js/components/pages/needs-and-libs/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require ('./needs-and-libs.css'); 2 | export * from './needs-and-libs.jsx'; 3 | export {default} from './needs-and-libs.jsx'; 4 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/loading/react-loader/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require('./react-loader.css'); 2 | export * from './react-loader.jsx'; 3 | export {default} from './react-loader.jsx'; 4 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/logo-devarchy/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require ('./logo-devarchy.css'); 2 | export * from './logo-devarchy.jsx'; 3 | export {default} from './logo-devarchy.jsx'; 4 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/month-picker/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require ('./month-picker.css'); 2 | export {default} from './month-picker.jsx'; 3 | export * from './month-picker.jsx'; 4 | 5 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/social-buttons/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) require ('./social-buttons.css'); 2 | export * from './social-buttons.jsx'; 3 | export {default} from './social-buttons.jsx'; 4 | -------------------------------------------------------------------------------- /client/src/js/components/mixins/reply-layout/index.js: -------------------------------------------------------------------------------- 1 | import ReplyLayoutMixin from './reply-layout.jsx'; 2 | 3 | if( typeof window !== 'undefined' ) require('./reply-layout.css'); 4 | 5 | export default ReplyLayoutMixin; 6 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/progressbar/index.js: -------------------------------------------------------------------------------- 1 | if( typeof window !== 'undefined' ) { 2 | require('./progressbar.css'); 3 | } 4 | export {default} from './progressbar.js'; 5 | export * from './progressbar.js'; 6 | 7 | -------------------------------------------------------------------------------- /client/src/js/rerender.js: -------------------------------------------------------------------------------- 1 | import assert from 'assertion-soft'; 2 | 3 | export default { 4 | carry_out: function(){ 5 | assert(this.action); 6 | this.action(); 7 | }, 8 | action: null, 9 | }; 10 | -------------------------------------------------------------------------------- /server/util/parse_markdown_catalog/linear_processing/processors/index.js: -------------------------------------------------------------------------------- 1 | module.exports = ( 2 | [ 3 | require('./npm_entry'), 4 | require('./web_entry'), 5 | require('./github_entry'), 6 | ] 7 | ); 8 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/resource-line/index.js: -------------------------------------------------------------------------------- 1 | import ResourceLineSnippet from './resource-line.jsx'; 2 | 3 | if( typeof window !== 'undefined' ) require ('./resource-line.css'); 4 | 5 | export default ResourceLineSnippet; 6 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/resource-view/index.js: -------------------------------------------------------------------------------- 1 | import ResourceViewSnippet from './resource-view.jsx'; 2 | 3 | if( typeof window !== 'undefined' ) require('./resource-view.css'); 4 | 5 | export default ResourceViewSnippet; 6 | 7 | -------------------------------------------------------------------------------- /server/database/thingdb/db_interface/load/events.js: -------------------------------------------------------------------------------- 1 | const util = require('./util'); 2 | 3 | 4 | module.exports = function(){ 5 | return util.retrieve_by_filter.apply(null, ['thing_event'].concat([].slice.call(arguments))); 6 | }; 7 | -------------------------------------------------------------------------------- /server/util/parse_markdown_catalog/util/log.js: -------------------------------------------------------------------------------- 1 | const options = require('./options'); 2 | 3 | module.exports = function log() { 4 | if( ! options.debug ) { 5 | return 6 | } 7 | console.log.apply(console, arguments); 8 | }; 9 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/markdown-list-view/index.js: -------------------------------------------------------------------------------- 1 | import MarkdownListView from './markdown-list-view.jsx'; 2 | 3 | if( typeof window !== 'undefined' ) require ('./markdown-list-view.css'); 4 | 5 | export default MarkdownListView; 6 | 7 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/reviewpoint-list/index.js: -------------------------------------------------------------------------------- 1 | import ReviewpointListSnippet from './reviewpoint-list.jsx'; 2 | 3 | if( typeof window !== 'undefined' ) require('./reviewpoint-list.css'); 4 | 5 | export default ReviewpointListSnippet; 6 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/resource-details/index.js: -------------------------------------------------------------------------------- 1 | import ResourceDetailsSnippet from './resource-details.jsx'; 2 | 3 | if( typeof window !== 'undefined' ) require('./resource-details.css'); 4 | 5 | export default ResourceDetailsSnippet; 6 | 7 | -------------------------------------------------------------------------------- /client/src/css/colors.css: -------------------------------------------------------------------------------- 1 | @import './colors.vars.css'; 2 | 3 | .css_color_red { 4 | color: var(--css_color_red); 5 | } 6 | .css_color_green { 7 | color: var(--css_color_green); 8 | } 9 | 10 | .css_color_error { 11 | color: black; 12 | } 13 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/resource-details/resource-details.css: -------------------------------------------------------------------------------- 1 | .css_resource_details { 2 | padding: 0 10px; 3 | padding-top: 10px; 4 | padding-bottom: 40px; 5 | } 6 | 7 | .markdown-body { 8 | font-size: 15px!important; 9 | } 10 | -------------------------------------------------------------------------------- /client/src/js/components/snippets/eraser.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const Eraser = React.createClass({ 4 | render: function(){ 5 | return