✨️Stay cozy under the moonlight✨️

Profile

· ─ ·✶· ─ · 
Name:Tiny Moon
Species:Angel Cat
Gender:Female
Birthday:July 19
Age:Immortal (appears 18)

Skills | Talents

· ─ ·✶· ─ ·
Martial Arts
Archery
Sword Play
Mage
Musical Knowledge
Sacred Arts
Shape Shift

Appearance

· ─ ·✶· ─ · 
Skin:Warm Beige
Height:4’11
Weight:100
Blood Type:O+
Hair Color:White
Hair length:Long
Eye color:Left White, Right Purple
Scars:Small ones on legs
Tattoos:None
Piercing:None

Likes

✧ Cats
✧ Dogs
✧ The moon
✧ Tamagotchi
✧ Pastel colors
✧ Birds
✧ Sweets
✧ Rainy days
✧ Animals

Interests

✧ Digital illustration
✧ VTubing
✧ Cozy & indie games
✧ Storytelling $ OC lore
✧ Sticker design
✧ Graphic design
✧ Community building (Discord)

Story

Born beneath the stars, Chiisai Tsukiko is a quiet angel cat who awakens in an unfamiliar world with only fragments of her memories. Guided by moonlight and hope, she sets out on a journey to discover who she truly is and where she belongs.Along the way, she learns that even the smallest light can brighten the darkest night. Through friendship, loss, love, and self-discovery, Chiisai's tale is a gentle fantasy about healing, finding purpose, and creating a place to call home.Read my blog Chiisai Dreams Cats

Connect with me

If you'd like to follow my other socials, or support me in any way, you can find my etsy shop or ko-fi here

🌙✨ Chiisai's Stream Schedule ✨🌙
cozy, spooky, & friendly streams ♡
⭐ Times automatically display in your local timezone ⭐
Loading schedule...
Please wait just a moment ♡
(function() { var scheduleRoot = document.querySelector('.moonchild-schedule'); var themeToggle = document.getElementById('themeToggle'); var themeDivider = document.getElementById('themeDivider'); var storageKey = 'chiisaiScheduleTheme'; function applyTheme(theme) { var isMoonlight = theme === 'moonlight'; if (!scheduleRoot) return; scheduleRoot.classList.toggle('moonlight', isMoonlight); if (themeToggle) { themeToggle.textContent = isMoonlight ? '🌙 Dark Mode' : '☀️ Light Mode'; themeToggle.setAttribute('aria-pressed', isMoonlight ? 'true' : 'false'); themeToggle.setAttribute('aria-label', isMoonlight ? 'Switch to Morning theme' : 'Switch to Moonlight theme'); } if (themeDivider) { themeDivider.textContent = isMoonlight ? '⭐☁️✨☾✨☁️⭐' : '☁️🌸☁️✨☁️☀️☁️✨☁️🌸☁️'; } } var savedTheme = null; try { savedTheme = localStorage.getItem(storageKey); } catch (e) {} applyTheme(savedTheme === 'moonlight' ? 'moonlight' : 'morning'); if (themeToggle) { themeToggle.addEventListener('click', function() { var nextTheme = scheduleRoot.classList.contains('moonlight') ? 'morning' : 'moonlight'; applyTheme(nextTheme); try { localStorage.setItem(storageKey, nextTheme); } catch (e) {} }); } function startSchedule() { var scheduleGrid = document.getElementById('scheduleGrid'); if (!scheduleGrid) return; scheduleGrid.innerHTML = ''; var STREAMS = [ { dayName: 'Wednesday', dayOfWeek: 3, header: '⭐ Wednesday Stream ⭐', game: '🌾 Stardew Valley ', desc: '🌸 cozy farming, moonlit relaxation, and sweet little adventures' }, { dayName: 'Thursday', dayOfWeek: 4, header: '🌙 Thursday Stream 🌙', game: '🪄 Little Witch in the Woods', desc: '✨ potion vibes, soft magic, and witchy woodland wonder' }, { dayName: 'Friday', dayOfWeek: 5, header: '⭐ Friday Stream ⭐', game: '🎀 Little Goody Two Shoes ', desc: '🖤 spooky-cute chaos, eerie fun, and moonlit screams' } ]; var CENTRAL_TIMEZONE = 'America/Chicago'; var NO_STREAM_DATES = { '2026-04-01': true }; function pad(n) { return String(n).padStart(2, '0'); } function formatLocalTime(tsSeconds) { var date = new Date(tsSeconds * 1000); return date.toLocaleString([], { weekday: 'long', month: 'long', day: 'numeric', hour: 'numeric', minute: '2-digit' }); } function formatICSDate(date) { return ( date.getUTCFullYear() + pad(date.getUTCMonth() + 1) + pad(date.getUTCDate()) + 'T' + pad(date.getUTCHours()) + pad(date.getUTCMinutes()) + pad(date.getUTCSeconds()) + 'Z' ); } function getCentralParts(date) { var parts = new Intl.DateTimeFormat('en-CA', { timeZone: CENTRAL_TIMEZONE, year: 'numeric', month: '2-digit', day: '2-digit', weekday: 'short' }).formatToParts(date); var map = {}; for (var i = 0; i < parts.length; i++) { if (parts[i].type !== 'literal') map[parts[i].type] = parts[i].value; } return { year: Number(map.year), month: Number(map.month), day: Number(map.day), weekdayShort: map.weekday }; } function getCentralWeekday(date) { var short = getCentralParts(date).weekdayShort; return ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'].indexOf(short); } function getCentralDateKey(date) { var p = getCentralParts(date); return p.year + '-' + pad(p.month) + '-' + pad(p.day); } function getOffsetMinutesForZone(date, timeZone) { var dtf = new Intl.DateTimeFormat('en-US', { timeZone: timeZone, year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hourCycle: 'h23' }); var parts = dtf.formatToParts(date); var map = {}; for (var i = 0; i < parts.length; i++) { if (parts[i].type !== 'literal') map[parts[i].type] = parts[i].value; } var asUTC = Date.UTC( Number(map.year), Number(map.month) - 1, Number(map.day), Number(map.hour), Number(map.minute), Number(map.second) ); return (asUTC - date.getTime()) / 60000; } function zonedTimeToUtc(year, month, day, hour, minute, timeZone) { var utcGuess = new Date(Date.UTC(year, month - 1, day, hour, minute, 0)); var offset = getOffsetMinutesForZone(utcGuess, timeZone); return new Date(utcGuess.getTime() - offset * 60000); } function getNextStreamDate(targetDow) { var now = new Date(); var probe = new Date(now); for (var i = 0; i < 21; i++) { var dow = getCentralWeekday(probe); var key = getCentralDateKey(probe); if (dow === targetDow && !NO_STREAM_DATES[key]) { var p = getCentralParts(probe); return { year: p.year, month: p.month, day: p.day }; } probe.setUTCDate(probe.getUTCDate() + 1); } return null; } function buildGoogleUrl(title, startUtc, endUtc, description) { var dates = formatICSDate(startUtc) + '/' + formatICSDate(endUtc); var url = 'https://calendar.google.com/calendar/render?action=TEMPLATE'; url += '&text=' + encodeURIComponent(title); url += '&dates=' + encodeURIComponent(dates); url += '&details=' + encodeURIComponent(description); return url; } function makeEl(tag, className, text) { var el = document.createElement(tag); if (className) el.className = className; if (text !== undefined) el.textContent = text; return el; } function makeTimeRow(labelText, valueText) { var row = makeEl('div', 'card-time'); var label = makeEl('span', 'label', labelText); var value = makeEl('span', 'local-time', valueText); row.appendChild(label); row.appendChild(value); return row; } function createCard(stream) { var nextDate = getNextStreamDate(stream.dayOfWeek); if (!nextDate) return; var startUtc = zonedTimeToUtc(nextDate.year, nextDate.month, nextDate.day, 19, 0, CENTRAL_TIMEZONE); var endUtc = zonedTimeToUtc(nextDate.year, nextDate.month, nextDate.day, 21, 0, CENTRAL_TIMEZONE); var startTs = Math.floor(startUtc.getTime() / 1000); var endTs = Math.floor(endUtc.getTime() / 1000); var title = 'Chiisai Tsukiko Stream - ' + stream.dayName; var description = 'Come join my ' + stream.dayName.toLowerCase() + ' stream ♡'; var card = makeEl('div', 'schedule-card'); card.appendChild(makeEl('div', 'card-top', stream.header)); card.appendChild(makeEl('div', 'card-game', stream.game)); card.appendChild(makeTimeRow('Starts:', formatLocalTime(startTs))); card.appendChild(makeTimeRow('Ends:', formatLocalTime(endTs))); card.appendChild(makeEl('div', 'card-desc', stream.desc)); var buttons = makeEl('div', 'card-buttons'); var googleBtn = makeEl('a', 'schedule-btn google-btn', '🌙 Add to Google'); googleBtn.href = buildGoogleUrl(title, startUtc, endUtc, description); googleBtn.target = '_blank'; googleBtn.rel = 'noopener noreferrer'; var icsBtn = makeEl('button', 'schedule-btn ics-btn', '⭐ Add to Calendar'); icsBtn.type = 'button'; icsBtn.addEventListener('click', function() { var ics = 'BEGIN:VCALENDAR\n' + 'VERSION:2.0\n' + 'PRODID:-//Moonchild Schedule//EN\n' + 'BEGIN:VEVENT\n' + 'UID:' + Date.now() + '@moonchildschedule\n' + 'DTSTAMP:' + formatICSDate(new Date()) + '\n' + 'DTSTART:' + formatICSDate(startUtc) + '\n' + 'DTEND:' + formatICSDate(endUtc) + '\n' + 'SUMMARY:' + title + '\n' + 'DESCRIPTION:' + description + '\n' + 'END:VEVENT\n' + 'END:VCALENDAR'; var blob = new Blob([ics], { type: 'text/calendar;charset=utf-8' }); var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url; a.download = title.replace(/[^a-z0-9]/gi, '_').toLowerCase() + '.ics'; document.body.appendChild(a); a.click(); document.body.removeChild(a); setTimeout(function() { URL.revokeObjectURL(url); }, 1000); }); buttons.appendChild(googleBtn); buttons.appendChild(icsBtn); card.appendChild(buttons); scheduleGrid.appendChild(card); } for (var i = 0; i < STREAMS.length; i++) { createCard(STREAMS[i]); } } setTimeout(startSchedule, 400); })();