diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..18a3ac4
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..f900d93
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..4c6280e
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index f8d1d8a..a54f0e2 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,14 @@
# kodi-timekeeper
+An approach to having kids use a Kodi media center instance: manage session use and keep track of time spent and available budget.
+
+## Valid Conventional Commits scopes
+
+* `meta`: Affects the Git project's structure such as for example a `pyproject.toml` change, adding a new directory or changing how a news fragment file is formatted
+ * Examples:
+ ```
+ refactor(meta): Move pytest config into 'pyproject.toml'
+ ```
+ ```
+ build(meta): Set custom towncrier news topics
+ ```
\ No newline at end of file
diff --git a/newsfragments/.gitignore b/newsfragments/.gitignore
new file mode 100644
index 0000000..b722e9e
--- /dev/null
+++ b/newsfragments/.gitignore
@@ -0,0 +1 @@
+!.gitignore
\ No newline at end of file
diff --git a/newsfragments/1.build.rst b/newsfragments/1.build.rst
new file mode 100644
index 0000000..49c115e
--- /dev/null
+++ b/newsfragments/1.build.rst
@@ -0,0 +1,2 @@
+Add rudimentary versioning mechanics
+Set up project defaults
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..7f9b5ef
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,105 @@
+[project]
+ name = "kodi-timekeeper"
+ description = "An approach to letting kids use a Kodi media center instance"
+ version = "0.1.0"
+ authors = [
+ { name = "hygienic-books", email = "hygienic-books@tentic.net" }
+ ]
+ dependencies = [
+ "certifi==2021.10.8",
+ # via requests
+ "charset-normalizer==2.0.12",
+ # via requests
+ "idna==3.3",
+ # via requests
+ "requests==2.27.1",
+ # via -r requirements.in
+ "urllib3==1.26.9"
+ # via requests
+ ]
+
+[project.optional-dependencies]
+ dev = [
+ "attrs==21.4.0",
+ # via pytest
+ "click==8.1.3",
+ # via
+ # click-default-group
+ # towncrier
+ "click-default-group==1.2.2",
+ # via towncrier
+ "incremental==21.3.0",
+ # via towncrier
+ "iniconfig==1.1.1",
+ # via pytest
+ "jinja2==3.1.2",
+ # via towncrier
+ "markupsafe==2.1.1",
+ # via jinja2
+ "packaging==21.3",
+ # via pytest
+ "pluggy==1.0.0",
+ # via pytest
+ "py==1.11.0",
+ # via pytest
+ "pyparsing==3.0.8",
+ # via packaging
+ "pytest==7.1.2",
+ # via -r requirements.in
+ "semver==2.13.0",
+ # via -r requirements.in
+ "tomli==2.0.1",
+ # via
+ # pytest
+ # towncrier
+ "towncrier==21.9.0"
+ # via -r requirements.in
+ ]
+
+[build-system]
+ requires = [
+ "setuptools==58.0.4",
+ "wheel==0.37.1"
+ ]
+ build-backend = "setuptools.build_meta"
+
+[tool.semantic_release]
+ version_toml = "pyproject.toml:project.version"
+ major_on_zero = false
+
+[tool.towncrier]
+ directory = "newsfragments"
+ package = "kodi-timekeeper"
+ package_dir = "src"
+ filename = "CHANGELOG.md"
+ type = [
+ { name = "Features", directory = "feat", showcontent = true },
+ { name = "Bug fixes", directory = "fix", showcontent = true },
+ { name = "Project structure", directory = "build", showcontent = true },
+ { name = "Refactor", directory = "refactor", showcontent = true },
+ { name = "Test", directory = "test", showcontent = true },
+ { name = "Documentation", directory = "docs", showcontent = true }
+ ]
+
+# New format is in the works, not yet part of towncrier 21.9.0
+# News topics from which we may want to choose:
+# [tool.towncrier.fragment.build]
+# [tool.towncrier.fragment.chore]
+# [tool.towncrier.fragment.ci]
+# [tool.towncrier.fragment.docs]
+# [tool.towncrier.fragment.feat]
+# [tool.towncrier.fragment.fix]
+# [tool.towncrier.fragment.perf]
+# [tool.towncrier.fragment.refactor]
+# [tool.towncrier.fragment.revert]
+# [tool.towncrier.fragment.style]
+# [tool.towncrier.fragment.test]
+# [tool.towncrier.fragment.deprecation]
+# [tool.towncrier.fragment.remove]
+# [tool.towncrier.fragment.trivial]
+# [tool.towncrier.fragment.meta]
+
+[tool.pytest.ini_options]
+ python_files = "test_*"
+ python_classes = "*Tests"
+ python_functions = "test_*"
\ No newline at end of file
diff --git a/requirements.in b/requirements.in
new file mode 100644
index 0000000..02013df
--- /dev/null
+++ b/requirements.in
@@ -0,0 +1,4 @@
+requests
+towncrier
+semver
+pytest
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..edcda7c
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,53 @@
+#
+# This file is autogenerated by pip-compile with python 3.10
+# To update, run:
+#
+# pip-compile
+#
+attrs==21.4.0
+ # via pytest
+certifi==2021.10.8
+ # via requests
+charset-normalizer==2.0.12
+ # via requests
+click==8.1.3
+ # via
+ # click-default-group
+ # towncrier
+click-default-group==1.2.2
+ # via towncrier
+idna==3.3
+ # via requests
+incremental==21.3.0
+ # via towncrier
+iniconfig==1.1.1
+ # via pytest
+jinja2==3.1.2
+ # via towncrier
+markupsafe==2.1.1
+ # via jinja2
+packaging==21.3
+ # via pytest
+pluggy==1.0.0
+ # via pytest
+py==1.11.0
+ # via pytest
+pyparsing==3.0.8
+ # via packaging
+pytest==7.1.2
+ # via -r requirements.in
+requests==2.27.1
+ # via -r requirements.in
+semver==2.13.0
+ # via -r requirements.in
+tomli==2.0.1
+ # via
+ # pytest
+ # towncrier
+towncrier==21.9.0
+ # via -r requirements.in
+urllib3==1.26.9
+ # via requests
+
+# The following packages are considered to be unsafe in a requirements file:
+# setuptools
diff --git a/src/__init__.py b/src/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/kodi-timekeeper/__init__.py b/src/kodi-timekeeper/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/kodi-timekeeper/__init__.py b/tests/kodi-timekeeper/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/kodi-timekeeper/test_ktk.py b/tests/kodi-timekeeper/test_ktk.py
new file mode 100644
index 0000000..8607642
--- /dev/null
+++ b/tests/kodi-timekeeper/test_ktk.py
@@ -0,0 +1,21 @@
+class KTKTests:
+ #def test_adding_two_ints_returns_correct_result(self):
+ # assert alter(1, 2) == 3
+ # pass
+
+ def test_one(self):
+ assert 1 == 1
+
+ def test_two(self):
+ expect = (1, 2, 3)
+ actual = (1, 2, 3)
+
+
+def test_adsasd():
+ expect = (1, 2, 3)
+ actual = (1, 2, 3)
+
+
+def test_aasssd():
+ expect = (1, 2, 3)
+ actual = (1, 2, 3)