User Tools

Site Tools


projects:projects

This is an old revision of the document!


Projects:

Projects

List of Projects

Each project is a web app, a subdomain of voyc.com, stored in gitlab (previously github).

For Developers

layout - browser screen splitter

account - submodule, user management

fx - submodule, library of game effects

icon - submodule, library of icons

jslib - library of javascript tools

minimal - html, css, javascript for a minimal web app

Apps

homepage - homepage for voyc.com

pokerface - facial expressions of artificial feelings

geo - geopolitics map drawing

curriculum - voycipedia

global - previously voyc, before geo

samantha - AI webchat

classy - comment classifier

sandbox - experiment and demo

bahasa - language

flash - flash card memorization

guru - random quote

mai - language

plunder - game added atop voyc

sanskrit - language

robots - multiple hardware projects

vote - ranked choice voting

wordnet - database only, sql version of Princeton's WordNet

model - starter project template

timeline - timeline

voyc - leftover from when geo/global was voyc.com

projects checklist sheet

webapps sheet

Developer Guidelines

Tab Indents

Always use the tab character to indent.

.gitignore

robots.txt
.well-known/*
js.min
css.min
index.php
RELEASES.md

Duplicate Content

Most of our projects have a dev and a production version.
Example:

  • jslib.voyc.com
  • jslib.hagstrand.com

These two sites have duplicate content.
We want to tell the search engines to index prod, not dev.
How do we do that?

option 1. robots.txt
User-agent: *
Disallow: /

This prevents the search engines from crawling the site.
But it does NOT prevent the search engines from indexing the site.

option 2. html meta
<meta name='robots' content='noindex,follow' />

This means that prod and dev will have a different line in index.html.
How can I do this dynamically? The crawlers are probably scraping the HTML without preprocessing javascript or PHP.

option 3. password

How do we do that?

option 4. temporary dev environment
  • Take care to not allow any links to the dev subdomains.
  1. Note that the a2 cpanel domains page has the <meta robots noindex> tag.
  2. When starting server development, manually add the <meta robots noindex> tag.
  3. After completion, delete the worktree, and/or put up a fake page.
  4. Maybe we only need one dev subdomain?

git Structure

Five Repository Groups

location name git purpose
gitlab gitlab voyc/proj.git (bare) public git host
a2 voycgit voycgit/proj.git central git repository
a2 webprod webprod/proj/.git production web host
a2 webdev webdev/proj/.git server development
local webapps webapps/proj/.git local development

Branches

gitlab, voycgit, and webprod have a master branch only.
webdev and webapps have a master branch and also a temporary feature branch.

Remotes

voycgit has no remotes.
gitlab has no remotes.
All other repositories have remote origin pointing to voycgit.
webprod also has remote gitlab.

get remote -v
$ origin ssh://voyccom@az1-ss8.a2hosting.com:7822/home/voyccom/voycgit/jslib.git	
$ gitlab https://gitlab.com/voyc/jslib.git

Note that use the ssh protocol; never the local protocol.

voyc git Workflow

refresh the local repo and worktree
git clone ssh://voyccom@az1-ss8.a2hosting.com:7822/home/voyccom/voycgit/vote.git
git branch   # make sure you're in the master branch
git pull origin master
git submodule foreach git pull origin master
start development
git branch popup         # create a feature branch
git checkout popup
development
<make changes>
git status
git add .
git commit -m 'New popup architecture'   # version control
git push origin popup      # remote backup
pull in simultaneous development from server - ????
git switch master
git pull origin master 
git checkout popup
git rebase master               # merge modified master into popup branch, resolve conflicts here
complete development
git checkout master
git merge popup
git diff master..popup
git branch -d popup
git push origin master      # push to central
git push origin -d popup   # delete branch from central
in webprod
git pull origin master
git push gitlab master

voyc release management

Trends in release management as of 2026.

  • 50/72 rule. A commit message has three lines (title, blank, body). The first line is the title and it is 50 characters long. The second line is blank. The third and subsequent lines make up the body; they are bullets, and they are 72 characters long. [Ed. title is my word. Other people say description or subject.]
  • Conventional Commits. The first line of the commit message is prefixed with a category: feat, fix, perf, style, refactor, test, build, chore. This rule overrides an earlier rule that the title should be capitalized.
  • Semantic Versioning. Each release is numbered major.minor.patch, like 14.3.5. When a development group breaks backward compatibility, now a normalized behavior, they assign a new major number. When a bug is discovered that is so dangerous it must be fixed immediately, they release a patch.

more on Conventional Commits
more on Semantic Versioning
Tim Pope: A Note About Git Commit Messages, 2008.

At voyc we use these above trends in commit messages and tag messages. The log of commit messages is detailed for developers. The list of tag messages is more abstract, for users and managers. Release histories are generated by script from the list of tag messages.

At deployment, a file named RELEASES.md is generated from the tag messages by a script. It is not committed; it listed in .gitignore.

more about log and tag

# All tags with their full messages, most recent first
git tag -l --sort=-version:refname | xargs -I{} git show {} --no-patch --pretty=format:"%tag %*%(tag)%n%s%n%b%n---"

git for-each-ref --sort=-version:refname --format="%(refname:short)%0a%(contents)%0a---" refs/tags
projects/projects.1781271365.txt.gz · Last modified: 2026/06/12 09:36 by jhagstrand

Except where otherwise noted, content on this wiki is licensed under the following license: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki