diff --git a/LandingPageUpdate-WorkingBuild/index.html b/LandingPageUpdate-WorkingBuild/index.html new file mode 100644 index 0000000..63b96bb --- /dev/null +++ b/LandingPageUpdate-WorkingBuild/index.html @@ -0,0 +1,83 @@ + + + + + + Your Page Title + + + + +
+
+ + +
+
+ + +
+ +

MemoryCache is an experimental development project to turn a local desktop environment into a personal on-device AI agent.

+ +
+ + + + +
+

Frequently Asked Questions

+ +
+ +
+

No. One of the core principles of MemoryCache is that you have full control over the system, and that it all stays on your device. If you’re a developer or someone who just likes to tinker with your computer applications, and you want to cloud-ify this, feel free! But we’re looking to stay entirely local. The software will form a link with folders that you point to on your computer and will utilize the contents to generate new forms of text intended to augment your existing workflows

+
+
+
+ +
+

Install the MemoryCache application on your computer. Run the program to start the locally-run server which will also load an interface in your browser to interact with your cache and personal AI agent. Create a new project and point to a folder (or multiple folders) on your computer for the AI to access. A process called ‘ingestion’ will make those files available to the AI to provide answers to queries and surface generated insights based on what you provide to the software

+
+
+
+ +
+

No. MemoryCache is a hackathon-style project by the Mozilla Innovation Ecosystem team, not a Firefox project. While the project uses a Firefox extension as a way of collecting information, this is a set of scripts and tools to augment privateGPT, a native AI application. It’s meant to streamline the process of saving information that you might read in the browser to store it in your own personal library of information.

+
+
+
+ + + + + + diff --git a/LandingPageUpdate-WorkingBuild/logo.png b/LandingPageUpdate-WorkingBuild/logo.png new file mode 100644 index 0000000..8977e11 Binary files /dev/null and b/LandingPageUpdate-WorkingBuild/logo.png differ diff --git a/LandingPageUpdate-WorkingBuild/script.js b/LandingPageUpdate-WorkingBuild/script.js new file mode 100644 index 0000000..cd9e535 --- /dev/null +++ b/LandingPageUpdate-WorkingBuild/script.js @@ -0,0 +1,22 @@ +document.addEventListener('DOMContentLoaded', function () { + var accordionButtons = document.querySelectorAll('.accordion-button'); + + accordionButtons.forEach(function(button) { + button.addEventListener('click', function() { + // This line optionally allows for closing all other accordions when one is opened. + const currentlyActiveAccordionButton = document.querySelector('.accordion-button.active'); + if(currentlyActiveAccordionButton && currentlyActiveAccordionButton !== button) { + currentlyActiveAccordionButton.classList.toggle('active'); + currentlyActiveAccordionButton.nextElementSibling.style.maxHeight = null; + } + + button.classList.toggle('active'); + var accordionContent = button.nextElementSibling; + if (accordionContent.style.maxHeight) { + accordionContent.style.maxHeight = null; + } else { + accordionContent.style.maxHeight = accordionContent.scrollHeight + 30 + "px"; + } + }); + }); +}); diff --git a/LandingPageUpdate-WorkingBuild/styles.css b/LandingPageUpdate-WorkingBuild/styles.css new file mode 100644 index 0000000..f2641bb --- /dev/null +++ b/LandingPageUpdate-WorkingBuild/styles.css @@ -0,0 +1,129 @@ +@charset "UTF-8"; +@import url("https://fonts.googleapis.com/css2?family=Work+Sans:wght@300;400;500;600&display=swap"); +html, body { + font-family: 'Work Sans', sans-serif; + background: linear-gradient(90deg, #FFB3BB 0%, #FFDFBA 26.56%, #FFFFBA 50.52%, #87EBDA 76.04%, #BAE1FF 100%); + padding: 0; + margin: 0; } + +section { + max-width: 800px; + margin: auto; } + +header { + margin: 24 0; } + header .content { + display: flex; + flex-direction: row; + justify-content: space-between; + max-width: 1000px; + margin: auto; } + header .content .logo { + width: 170px; + height: 33px; + margin: auto 0; } + header .content nav ul { + display: flex; + list-style-type: none; } + header .content nav ul li a { + margin: 12px; + text-decoration: none; + color: #2d3d46; + font-size: 16px; + font-weight: 400; + line-height: 24px; } + +.hero { + padding: 40px; } + +.features { + display: flex; + flex-wrap: wrap; + justify-content: space-between; } + +.features article { + max-width: 360px; } + +p { + font-size: 1em; + line-height: 150%; } + +.heading-1 { + color: #2d3d46; + font-size: 1.4em; + line-height: 150%; + font-weight: 400; } + +.heading-2 { + color: #2d3d46; + font-size: .8em; + line-height: 150%; + font-weight: 400; } + +.heading-3 { + color: #2d3d46; + font-size: 1em; + line-height: 150%; + font-weight: 400; } + +button { + font-family: 'Work Sans', sans-serif; } + +.banner-bar { + width: 100%; + height: 100%; + background: #FFFFFF4D; + padding: 16px 0; + margin: 40px 0; } + +.primary-button { + color: #180AB8; + background-color: #FFFFFF6D; + font-size: 1em; + font-weight: 500; + line-height: 24px; + padding: 16px 24px; + background: #FFFFFF; + border: none; + transition: background-color 0.2s ease; + border-radius: 8px; } + +.primary-button:hover { + background-color: #FFFFFF8D; + cursor: pointer; } + +.accordion-content { + max-height: 0; + padding: 0 12px; + overflow: hidden; + transition: max-height 0.2s ease; + border: 0px; + border-top: none; + margin-bottom: 12px; } + +.accordion-button { + background-color: #FFFFFF2D; + color: #2d3d46; + border: none; + cursor: pointer; + padding: 12px; + width: 100%; + text-align: left; + outline: none; + transition: background-color 0.2s ease; + font-size: 1em; + border-radius: 8px; } + +.accordion-button:hover { + background-color: #FFFFFF6D; } + +.accordion-button:after { + content: '\002B'; + /* Unicode character for "plus" sign (+) */ + color: #777; + float: right; + margin-left: 5px; } + +.accordion-button.active:after { + content: "\2212"; + /* Unicode character for "minus" sign (−) */ } diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html index 58e141b..3187559 100644 --- a/docs/_layouts/default.html +++ b/docs/_layouts/default.html @@ -16,5 +16,5 @@ {%- include footer.html -%} - + diff --git a/docs/_layouts/home.html b/docs/_layouts/home.html index f13cbb2..afd765e 100644 --- a/docs/_layouts/home.html +++ b/docs/_layouts/home.html @@ -8,22 +8,57 @@

{{ page.title }}

{%- endif -%} {{ content }} -
-

MemoryCache is an experimental development project to turn a local desktop environment into an on-device AI agent.

-
+
+
+ +

MemoryCache is an experimental development project to turn a local desktop environment into a personal on-device AI agent.

+ +
-
-

Every human is unique. The original vision of the personal computer was as a companion tool for creating intelligence, and the internet was born as a way to connect people and data together around the world. Today, artificial intelligence is upending the way that we interact with data and information, but control of these systems is most often provided through an API endpoint, run in the cloud, and abstracting away deep personal agency in favor of productivity.

+ -

MemoryCache, a Mozilla Innovation Project, is an experimental AI Firefox add-on that partners with privateGPT to quickly save your browser history to your local machine and have a local AI model ingest these - and any other local files you give it - to augment responses to a chat interface that comes built-in with privateGPT. We have an ambition to use MemoryCache to move beyond the chat interface, and find a way to utilize idle compute time to generate net new insights that reflect what you've actually read and learned - not the entirety of the internet at scale.

-
- -
Design mockup of a future interface idea for MemoryCache
-
-

We're not breaking ground on AI innovation (in fact, we're using an old, "deprecated" file format from a whole six months ago), by design. MemoryCache is a project that allows us to sow some seeds of exploration into creating a deeply personalized AI experience that returns to the original vision of the computer as a companion for our own thought. With MemoryCache, weirdness and unpredictability is part of the charm.

-

We're a small team working on MemoryCache as a part-time project within Mozilla's innovation group, looking at ways that our personal data and files are used to form insights and new neural connections for our own creative purpose. We're working in the open not because we have answers, but because we want to contribute our way of thinking to one another in a way where others can join in.

-
+
+

Frequently Asked Questions

+ +
+ +
+

No. One of the core principles of MemoryCache is that you have full control over the system, and that it all stays on your device. If you’re a developer or someone who just likes to tinker with your computer applications, and you want to cloud-ify this, feel free! But we’re looking to stay entirely local. The software will form a link with folders that you point to on your computer and will utilize the contents to generate new forms of text intended to augment your existing workflows

+
+
+
+ +
+

Install the MemoryCache application on your computer. Run the program to start the locally-run server which will also load an interface in your browser to interact with your cache and personal AI agent. Create a new project and point to a folder (or multiple folders) on your computer for the AI to access. A process called ‘ingestion’ will make those files available to the AI to provide answers to queries and surface generated insights based on what you provide to the software

+
+
+
+ +
+

No. MemoryCache is a hackathon-style project by the Mozilla Innovation Ecosystem team, not a Firefox project. While the project uses a Firefox extension as a way of collecting information, this is a set of scripts and tools to augment privateGPT, a native AI application. It’s meant to streamline the process of saving information that you might read in the browser to store it in your own personal library of information.

+
+
+
+
{%- if site.posts.size > 0 -%}

{{ page.list_title | default: "Updates" }}

@@ -46,5 +81,4 @@

subscribe via RSS

{%- endif -%} - diff --git a/docs/_sass/memorycache.scss b/docs/_sass/memorycache.scss index 98b4b6d..41a8e43 100644 --- a/docs/_sass/memorycache.scss +++ b/docs/_sass/memorycache.scss @@ -1,9 +1,14 @@ -@import url('https://fonts.googleapis.com/css2?family=Work+Sans:wght@300;400;500;600&display=swap'); +@charset "UTF-8"; +@import url("https://fonts.googleapis.com/css2?family=Work+Sans:wght@300;400;500;600&display=swap"); body { font-family: 'Work Sans'; } +.home { + background: linear-gradient(90deg, #FFB3BB 0%, #FFDFBA 26.56%, #FFFFBA 50.52%, #87EBDA 76.04%, #BAE1FF 100%); +} + .site-title { font-family: 'Work Sans'; color: coral; @@ -83,3 +88,130 @@ figcaption { font-style: italic; margin: 1em 0 3em 0; } + + +section { + max-width: 800px; + margin: auto; +} + + +header { + margin: 24 0; } + header .content { + display: flex; + flex-direction: row; + justify-content: space-between; + max-width: 1000px; + margin: auto; } + header .content .logo { + width: 170px; + height: 33px; + margin: auto 0; } + header .content nav ul { + display: flex; + list-style-type: none; } + header .content nav ul li a { + margin: 12px; + text-decoration: none; + color: #2d3d46; + font-size: 16px; + font-weight: 400; + line-height: 24px; +} + +.hero { + padding: 40px; +} + +.features { + display: flex; + flex-wrap: wrap; + justify-content: space-between; } + +.features article { + max-width: 360px; } + +p { + font-size: 1em; + line-height: 150%; } + +.heading-1 { + color: #2d3d46; + font-size: 1.4em; + line-height: 150%; + font-weight: 400; } + +.heading-2 { + color: #2d3d46; + font-size: 1.2em; + line-height: 150%; + font-weight: 400; } + +.heading-3 { + color: #2d3d46; + font-size: 1em; + line-height: 150%; + font-weight: 400; } + +button { + font-family: 'Work Sans', sans-serif; } + +.banner-bar { + width: 100%; + height: 100%; + background: #FFFFFF4D; + padding: 16px 0; + margin: 40px 0; } + +.primary-button { + color: #180AB8; + background-color: #FFFFFF6D; + font-size: 1em; + font-weight: 500; + line-height: 24px; + padding: 16px 24px; + background: #FFFFFF; + border: none; + transition: background-color 0.2s ease; + border-radius: 8px; } + +.primary-button:hover { + background-color: #FFFFFF8D; + cursor: pointer; } + +.accordion-content { + max-height: 0; + padding: 0 12px; + overflow: hidden; + transition: max-height 0.2s ease; + border: 0px; + border-top: none; + margin-bottom: 12px; } + +.accordion-button { + background-color: #FFFFFF2D; + color: #2d3d46; + border: none; + cursor: pointer; + padding: 12px; + width: 100%; + text-align: left; + outline: none; + transition: background-color 0.2s ease; + font-size: 1em; + border-radius: 8px; } + +.accordion-button:hover { + background-color: #FFFFFF6D; } + +.accordion-button:after { + content: '\002B'; + /* Unicode character for "plus" sign (+) */ + color: #777; + float: right; + margin-left: 5px; } + +.accordion-button.active:after { + content: "\2212"; + /* Unicode character for "minus" sign (−) */ } diff --git a/docs/assets/script.js b/docs/assets/script.js new file mode 100644 index 0000000..cd9e535 --- /dev/null +++ b/docs/assets/script.js @@ -0,0 +1,22 @@ +document.addEventListener('DOMContentLoaded', function () { + var accordionButtons = document.querySelectorAll('.accordion-button'); + + accordionButtons.forEach(function(button) { + button.addEventListener('click', function() { + // This line optionally allows for closing all other accordions when one is opened. + const currentlyActiveAccordionButton = document.querySelector('.accordion-button.active'); + if(currentlyActiveAccordionButton && currentlyActiveAccordionButton !== button) { + currentlyActiveAccordionButton.classList.toggle('active'); + currentlyActiveAccordionButton.nextElementSibling.style.maxHeight = null; + } + + button.classList.toggle('active'); + var accordionContent = button.nextElementSibling; + if (accordionContent.style.maxHeight) { + accordionContent.style.maxHeight = null; + } else { + accordionContent.style.maxHeight = accordionContent.scrollHeight + 30 + "px"; + } + }); + }); +}); diff --git a/docs/build/_layouts/default.html b/docs/build/_layouts/default.html new file mode 100644 index 0000000..3187559 --- /dev/null +++ b/docs/build/_layouts/default.html @@ -0,0 +1,20 @@ + + + + {%- include head.html -%} + + + + {%- include header.html -%} + +
+
+ {{ content }} +
+
+ + {%- include footer.html -%} + + + + diff --git a/docs/build/_layouts/home.html b/docs/build/_layouts/home.html new file mode 100644 index 0000000..afd765e --- /dev/null +++ b/docs/build/_layouts/home.html @@ -0,0 +1,84 @@ +--- +layout: default +--- + +
+ {%- if page.title -%} +

{{ page.title }}

+ {%- endif -%} + + {{ content }} +
+
+ +

MemoryCache is an experimental development project to turn a local desktop environment into a personal on-device AI agent.

+ +
+ + + + +
+

Frequently Asked Questions

+ +
+ +
+

No. One of the core principles of MemoryCache is that you have full control over the system, and that it all stays on your device. If you’re a developer or someone who just likes to tinker with your computer applications, and you want to cloud-ify this, feel free! But we’re looking to stay entirely local. The software will form a link with folders that you point to on your computer and will utilize the contents to generate new forms of text intended to augment your existing workflows

+
+
+
+ +
+

Install the MemoryCache application on your computer. Run the program to start the locally-run server which will also load an interface in your browser to interact with your cache and personal AI agent. Create a new project and point to a folder (or multiple folders) on your computer for the AI to access. A process called ‘ingestion’ will make those files available to the AI to provide answers to queries and surface generated insights based on what you provide to the software

+
+
+
+ +
+

No. MemoryCache is a hackathon-style project by the Mozilla Innovation Ecosystem team, not a Firefox project. While the project uses a Firefox extension as a way of collecting information, this is a set of scripts and tools to augment privateGPT, a native AI application. It’s meant to streamline the process of saving information that you might read in the browser to store it in your own personal library of information.

+
+
+
+
+ + {%- if site.posts.size > 0 -%} +

{{ page.list_title | default: "Updates" }}

+
    + {%- for post in site.posts -%} +
  • + {%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%} + +

    + + {{ post.title | escape }} + +

    + {%- if site.show_excerpts -%} + {{ post.excerpt }} + {%- endif -%} +
  • + {%- endfor -%} +
+ +

subscribe via RSS

+ {%- endif -%} +
diff --git a/docs/build/_sass/memorycache.css b/docs/build/_sass/memorycache.css new file mode 100644 index 0000000..45343a8 --- /dev/null +++ b/docs/build/_sass/memorycache.css @@ -0,0 +1,234 @@ +@charset "UTF-8"; +@import url("https://fonts.googleapis.com/css2?family=Work+Sans:wght@300;400;500;600&display=swap"); +body { + font-family: "Work Sans"; +} + +.home { + background: linear-gradient(90deg, #FFB3BB 0%, #FFDFBA 26.56%, #FFFFBA 50.52%, #87EBDA 76.04%, #BAE1FF 100%); +} + +.site-title { + font-family: "Work Sans"; + color: coral; +} + +.introduction { + background-image: url("../assets/images/header-background.png"); + background-repeat: no-repeat; + background-size: 675px 210.75px; + background-position: right; + width: 100%; + min-height: 201px; + border-bottom-width: 1px; + border-bottom-style: solid; + border-bottom-color: #F0EFEF; +} + +.page-content { + background-color: white; +} + +a { + color: #180AB8; +} + +.site-logo { + width: 166px; + height: 36px; +} + +.site-header { + border-top-width: 5px; + border-top-style: solid; + border-image: linear-gradient(90deg, #FFB3BB 0%, #FFDFBA 26.56%, #FFFFBA 50.52%, #87EBDA 76.04%, #BAE1FF 100%) 1 0 0 0; +} + +.callout-left { + width: 75%; + padding-top: 5%; +} + +.page-content { + border-top-width: 1px; + border-top-style: solid; + border-top-color: #F0EFEF; +} + +.post-list-heading { + font-size: 16px; + padding-top: 5px; +} + +.post-link { + font-size: 16px; +} + +.moz-logo { + width: 128px; + float: right; +} + +.detailed-overview { + padding-top: 5px; + border-top-width: 1px; + border-bottom-width: 1px; + border-top-style: solid; + border-bottom-style: solid; + border-top-color: #F0EFEF; + border-bottom-color: #F0EFEF; +} + +figcaption { + text-align: center; + font-style: italic; + margin: 1em 0 3em 0; +} + +section { + max-width: 800px; + margin: auto; +} + +header { + margin: 24 0; +} + +header .content { + display: flex; + flex-direction: row; + justify-content: space-between; + max-width: 1000px; + margin: auto; +} + +header .content .logo { + width: 170px; + height: 33px; + margin: auto 0; +} + +header .content nav ul { + display: flex; + list-style-type: none; +} + +header .content nav ul li a { + margin: 12px; + text-decoration: none; + color: #2d3d46; + font-size: 16px; + font-weight: 400; + line-height: 24px; +} + +.hero { + padding: 40px; +} + +.features { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} + +.features article { + max-width: 360px; +} + +p { + font-size: 1em; + line-height: 150%; +} + +.heading-1 { + color: #2d3d46; + font-size: 1.4em; + line-height: 150%; + font-weight: 400; +} + +.heading-2 { + color: #2d3d46; + font-size: 1.2em; + line-height: 150%; + font-weight: 400; +} + +.heading-3 { + color: #2d3d46; + font-size: 1em; + line-height: 150%; + font-weight: 400; +} + +button { + font-family: "Work Sans", sans-serif; +} + +.banner-bar { + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.3019607843); + padding: 16px 0; + margin: 40px 0; +} + +.primary-button { + color: #180AB8; + background-color: rgba(255, 255, 255, 0.4274509804); + font-size: 1em; + font-weight: 500; + line-height: 24px; + padding: 16px 24px; + background: #FFFFFF; + border: none; + transition: background-color 0.2s ease; + border-radius: 8px; +} + +.primary-button:hover { + background-color: rgba(255, 255, 255, 0.5529411765); + cursor: pointer; +} + +.accordion-content { + max-height: 0; + padding: 0 12px; + overflow: hidden; + transition: max-height 0.2s ease; + border: 0px; + border-top: none; + margin-bottom: 12px; +} + +.accordion-button { + background-color: rgba(255, 255, 255, 0.1764705882); + color: #2d3d46; + border: none; + cursor: pointer; + padding: 12px; + width: 100%; + text-align: left; + outline: none; + transition: background-color 0.2s ease; + font-size: 1em; + border-radius: 8px; +} + +.accordion-button:hover { + background-color: rgba(255, 255, 255, 0.4274509804); +} + +.accordion-button:after { + content: "+"; + /* Unicode character for "plus" sign (+) */ + color: #777; + float: right; + margin-left: 5px; +} + +.accordion-button.active:after { + content: "−"; + /* Unicode character for "minus" sign (−) */ +} diff --git a/docs/build/assets/script-min.js b/docs/build/assets/script-min.js new file mode 100644 index 0000000..383ae37 --- /dev/null +++ b/docs/build/assets/script-min.js @@ -0,0 +1 @@ +document.addEventListener("DOMContentLoaded",(function(){document.querySelectorAll(".accordion-button").forEach((function(t){t.addEventListener("click",(function(){const e=document.querySelector(".accordion-button.active");e&&e!==t&&(e.classList.toggle("active"),e.nextElementSibling.style.maxHeight=null),t.classList.toggle("active");var n=t.nextElementSibling;n.style.maxHeight?n.style.maxHeight=null:n.style.maxHeight=n.scrollHeight+30+"px"}))}))})); \ No newline at end of file diff --git a/docs/build/script-min.js b/docs/build/script-min.js new file mode 100644 index 0000000..383ae37 --- /dev/null +++ b/docs/build/script-min.js @@ -0,0 +1 @@ +document.addEventListener("DOMContentLoaded",(function(){document.querySelectorAll(".accordion-button").forEach((function(t){t.addEventListener("click",(function(){const e=document.querySelector(".accordion-button.active");e&&e!==t&&(e.classList.toggle("active"),e.nextElementSibling.style.maxHeight=null),t.classList.toggle("active");var n=t.nextElementSibling;n.style.maxHeight?n.style.maxHeight=null:n.style.maxHeight=n.scrollHeight+30+"px"}))}))})); \ No newline at end of file