Projects:
Each project is a web app, a subdomain of voyc.com, stored in gitlab (previously github).
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
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
Always use the tab character to indent.
robots.txt .well-known/* js.min css.min index.php RELEASES.md
Most of our projects have a dev and a production version.
Example:
These two sites have duplicate content.
We want to tell the search engines to index prod, not dev.
How do we do that?
User-agent: * Disallow: /
This prevents the search engines from crawling the site.
But it does NOT prevent the search engines from indexing the site.
<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.
How do we do that?
| 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 |
gitlab, voycgit, and webprod have a master branch only.
webdev and webapps have a master branch and also a temporary feature branch.
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.
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
git branch popup # create a feature branch git checkout popup
<make changes> git status git add . git commit -m 'New popup architecture' # version control git push origin popup # remote backup
git switch master git pull origin master git checkout popup git rebase master # merge modified master into popup branch, resolve conflicts here
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
git pull origin master git push gitlab master
Trends in release management as of 2026.
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.
# 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
Practices:
# in laptop dev repo # git filter-repo --mailmap .mailmap --force # lint git checkout master git merge blend git branch -d blend git tag v0.0.0 -m'...' git push origin master --force --tags git push origin --delete blend # in production webserver git fetch origin git reset --hard origin/master git push gitlab master --tags