Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Renaming kukkee to samay #211

Merged
merged 2 commits into from
Jan 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# In production, NEXT_MONGODB_URI is the connection string
# In development, NEXT_MONGODB_URI is mongodb://localhost:27017/kukkeePolls
# In development, NEXT_MONGODB_URI is mongodb://localhost:27017/samayPolls
NEXT_MONGODB_URI=

# In production, NEXT_PUBLIC_BASE_URL is the base URL of your deployment; like https://www.kukkee.com
# In production, NEXT_PUBLIC_BASE_URL is the base URL of your deployment; like https://samay.app
# In development, NEXT_PUBLIC_BASE_URL is http://localhost:3000
NEXT_PUBLIC_BASE_URL=

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Contributing

Hi there! We're thrilled that you'd like to contribute to Kukkee!
Hi there! We're thrilled that you'd like to contribute to Samay!

## Issues and PRs

Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2022 Kukkee
Copyright (c) 2022 Samay

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
30 changes: 15 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,41 @@
<div align="center">
<a href="https://www.kukkee.com/">
<a href="https://samay.app/">
<img
src="./public/favicon.svg"
alt="Kukkee Logo"
alt="Samay Logo"
height="64"
/>
</a>
<p>
<b>
Kukkee — free and open source meeting poll tool
Samay — free and open source meeting poll tool
</b>
</p>
<p>

[![License](https://img.shields.io/github/license/Kukkee/Kukkee?color=%23000000&style=for-the-badge)](https://github.com/Kukkee/Kukkee/blob/main/LICENSE)
[![Polls created: 2500+](https://shields.io/badge/style-2500+-black?&style=for-the-badge&label=Polls%20created)](https://kukkee.com/)
[![Create a poll](https://shields.io/badge/style-Now-black?&style=for-the-badge&label=Create%20a%20poll)](https://kukkee.com/)
[![License](https://img.shields.io/github/license/samayapp/samay?color=%23000000&style=for-the-badge)](https://github.com/samayapp/samay/blob/main/LICENSE)
[![Polls created: 2500+](https://shields.io/badge/style-2500+-black?&style=for-the-badge&label=Polls%20created)](https://samay.app/)
[![Create a poll](https://shields.io/badge/style-Now-black?&style=for-the-badge&label=Create%20a%20poll)](https://samay.app/)

</p>
<br/>
</div>

Kukkee is a free and open source meeting poll tool. Quickly find a time which works for everyone without the back-and-forth texts/emails!
Samay is a free and open source meeting poll tool. Quickly find a time which works for everyone without the back-and-forth texts/emails!

- Create a meeting poll by choosing the time slots based on your availability.
- Copy and share the poll link with the participants to let them mark their availability.
- Find the most popular times and see who's free with "yes" votes - or who can be - with "if need be" votes, and book the meeting!

Create a poll now at [Kukkee.com](https://kukkee.com/)!
Create a poll now at [Samay.app](https://samay.app/)!

## Motivation

After my GSoC '20 at LiberTEM, I wanted to have a video call with my mentors. They said yes, and since the next step was to find a suitable and common time, one of them sent me a link to a meeting poll created using a proprietary online service. It had surprisingly bad UX and was covered with advertisements. I searched for good, free and open source meeting poll tools, but didn't find any. So I decided to fix that problem.

## Get in touch

If you have suggestions for how Kukkee could be improved, please add your thoughts on a relevant discussion [here](https://github.com/Kukkee/Kukkee/discussions/) or start a new discussion. If you have any questions, I'd love to hear them too! If you want to report an issue, check if the issue is already opened [here](https://github.com/AnandBaburajan/Kukkee/issues) otherwise open a new one.
If you have suggestions for how Samay could be improved, please add your thoughts on a relevant discussion [here](https://github.com/samayapp/samay/discussions/) or start a new discussion. If you have any questions, I'd love to hear them too! If you want to report an issue, check if the issue is already opened [here](https://github.com/samayapp/samay/issues) otherwise open a new one.

## Self-hosting

Expand All @@ -45,7 +45,7 @@ Coming soon!

### Vercel and MongoDB Atlas

Kukkee is built with MongoDB and Next.js, so for a quick and free setup, you can use a free MongoDB Atlas cluster and Vercel's hobby plan.
Samay is built with MongoDB and Next.js, so for a quick and free setup, you can use a free MongoDB Atlas cluster and Vercel's hobby plan.

You can get started with MongoDB Atlas for free [here](https://www.mongodb.com/basics/mongodb-atlas-tutorial). Make sure to add all IP addresses (0.0.0.0/0) to the IP access list of your Atlas cluster since it is not possible to determine the IP addresses of Vercel deployments.

Expand All @@ -67,13 +67,13 @@ First, make sure you have [Node.js](https://nodejs.org/en/) and [MongoDB](https:
1. Fork this repo to your own GitHub account and then clone it.

```sh
git clone https://github.com/<your-username>/Kukkee.git
git clone https://github.com/<your-username>/samay.git
```

2. Go to the project folder

```sh
cd Kukkee
cd samay
```

3. Create a new branch:
Expand Down Expand Up @@ -110,9 +110,9 @@ First, make sure you have [Node.js](https://nodejs.org/en/) and [MongoDB](https:

## Acknowledgements

Thanks to FOSS United for selecting Kukkee as one of the [winning projects](https://forum.fossunited.org/t/foss-hack-3-0-results/1882) at FOSS Hack 3.0.
Thanks to FOSS United for selecting Samay as one of the [winning projects](https://forum.fossunited.org/t/foss-hack-3-0-results/1882) at FOSS Hack 3.0.

Thanks to these amazing projects which help power Kukkee:
Thanks to these amazing projects which help power Samay:

- React-big-calendar
- React
Expand All @@ -126,4 +126,4 @@ Thanks to these amazing projects which help power Kukkee:

## License

Kukkee is distributed under the [MIT License](https://github.com/AnandBaburajan/Kukkee/blob/main/LICENSE).
Samay is distributed under the [MIT License](https://github.com/samayapp/samay/blob/main/LICENSE).
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "kukkee",
"name": "samay",
"description": "Free and open source meeting poll tool",
"version": "2.0.0",
"scripts": {
Expand All @@ -10,7 +10,7 @@
},
"repository": {
"type": "git",
"url": "https://github.com/AnandBaburajan/Kukkee.git"
"url": "https://github.com/samayapp/samay.git"
},
"license": "MIT",
"dependencies": {
Expand Down
8 changes: 4 additions & 4 deletions pages/api/poll/[id].ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NextApiRequest, NextApiResponse } from "next";
import KukkeePoll, { Vote, PollDoc } from "../../../src/models/poll";
import SamayPoll, { Vote, PollDoc } from "../../../src/models/poll";
import { isTimePresentInPollTimes } from "../../../src/helpers";
import connectToDatabase from "../../../src/utils/db";

Expand All @@ -17,7 +17,7 @@ export default async (
case "GET":
try {
await connectToDatabase();
const poll: PollDoc | null = await KukkeePoll.findOne({
const poll: PollDoc | null = await SamayPoll.findOne({
_id: id,
}).lean();
if (!poll) {
Expand All @@ -32,7 +32,7 @@ export default async (
case "PUT":
try {
await connectToDatabase();
const poll: PollDoc | null = await KukkeePoll.findOne({
const poll: PollDoc | null = await SamayPoll.findOne({
_id: id,
});
if (poll) {
Expand Down Expand Up @@ -60,7 +60,7 @@ export default async (
},
];
}
const updatedPoll: PollDoc | null = await KukkeePoll.findOneAndUpdate(
const updatedPoll: PollDoc | null = await SamayPoll.findOneAndUpdate(
{ _id: id },
{ votes: newVotes },
{ new: true }
Expand Down
10 changes: 5 additions & 5 deletions pages/api/poll/[id]/[secret].ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NextApiRequest, NextApiResponse } from "next";
import KukkeePoll, { PollDoc } from "../../../../src/models/poll";
import SamayPoll, { PollDoc } from "../../../../src/models/poll";
import connectToDatabase from "../../../../src/utils/db";

export default async (
Expand All @@ -16,15 +16,15 @@ export default async (
case "PUT":
try {
await connectToDatabase();
const poll: PollDoc | null = await KukkeePoll.findOne({
const poll: PollDoc | null = await SamayPoll.findOne({
_id: id,
}).lean();
if (poll) {
if (poll.secret !== secret) {
res.status(403).json({ message: "Forbidden" });
} else {
try {
const updatedPoll: PollDoc | null = await KukkeePoll.findOneAndUpdate(
const updatedPoll: PollDoc | null = await SamayPoll.findOneAndUpdate(
{ _id: id },
JSON.parse(body),
{ new: true }
Expand All @@ -44,15 +44,15 @@ export default async (
case "DELETE":
try {
await connectToDatabase();
const poll: PollDoc | null = await KukkeePoll.findOne({
const poll: PollDoc | null = await SamayPoll.findOne({
_id: id,
}).lean();
if (poll) {
if (poll.secret !== secret) {
res.status(403).json({ message: "Forbidden" });
} else {
try {
const deletedPoll = await KukkeePoll.findByIdAndRemove(id);
const deletedPoll = await SamayPoll.findByIdAndRemove(id);
res.status(200).json(deletedPoll);
} catch (err) {
res.status(400).json({ message: err.message });
Expand Down
4 changes: 2 additions & 2 deletions pages/api/poll/create.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NextApiRequest, NextApiResponse } from "next";
import KukkeePoll, { PollDoc } from "../../../src/models/poll";
import SamayPoll, { PollDoc } from "../../../src/models/poll";
import connectToDatabase from "../../../src/utils/db";

export default async (
Expand All @@ -12,7 +12,7 @@ export default async (
case "POST":
try {
await connectToDatabase();
const newPoll: PollDoc = new KukkeePoll(JSON.parse(body));
const newPoll: PollDoc = new SamayPoll(JSON.parse(body));
await newPoll.save();
res.status(201).json(newPoll);
} catch (err) {
Expand Down
22 changes: 11 additions & 11 deletions pages/how-to.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,37 +9,37 @@ const HowTo = (): JSX.Element => {
return (
<>
<Head>
<title>Kukkee — How-to</title>
<title>Samay — How-to</title>
<link rel="shortcut icon" href="/favicon.svg" />
<meta charSet="UTF-8" />
<meta name="robots" content="noindex" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="title" content="Kukkee — Meeting poll tool" />
<meta name="title" content="Samay — Meeting poll tool" />
<meta
name="description"
content="Here's how to get started with Kukkee - a free and open source meeting poll tool."
content="Here's how to get started with Samay - a free and open source meeting poll tool."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://kukkee.com" />
<meta property="og:title" content="Kukkee — Meeting poll tool" />
<meta property="og:url" content="https://samay.app" />
<meta property="og:title" content="Samay — Meeting poll tool" />
<meta
property="og:description"
content="Here's how to get started with Kukkee - a free and open source meeting poll tool."
content="Here's how to get started with Samay - a free and open source meeting poll tool."
/>
<meta property="og:image" content="/banner.png" />
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content="https://kukkee.com" />
<meta property="twitter:title" content="Kukkee — Meeting poll tool" />
<meta property="twitter:url" content="https://samay.app" />
<meta property="twitter:title" content="Samay — Meeting poll tool" />
<meta
property="twitter:description"
content="Here's how to get started with Kukkee - a free and open source meeting poll tool."
content="Here's how to get started with Samay - a free and open source meeting poll tool."
/>
<meta property="twitter:image" content="/banner.png" />
</Head>
<Layout>
<Container className="how-to-container">
<span className="how-to-features title">
Kukkee — free and open source meeting poll tool
Samay — free and open source meeting poll tool
</span>
<span className="how-to-features desc">
Quickly find a time which works for everyone without the
Expand Down Expand Up @@ -71,7 +71,7 @@ const HowTo = (): JSX.Element => {
<CheckCircleFill className="how-to-card icon-yes" /> (yes) or{" "}
<CircleFill className="how-to-card icon-if-need-be" /> (if
need be) votes. No login required. No time zone confusion
since Kukkee automatically shows participants times in their
since Samay automatically shows participants times in their
local time zone.
</Card.Text>
</Card.Body>
Expand Down
34 changes: 17 additions & 17 deletions pages/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import toastOptions from "../src/helpers/toastOptions";
import Layout from "../src/components/Layout";
import { encrypt } from "../src/helpers";
import { Time, Poll } from "../src/models/poll";
import KukkeeRBC from "../src/components/KukkeeRBC";
import SamayRBC from "../src/components/SamayRBC";
import { createPoll } from "../src/utils/api/server";

const Home = (): JSX.Element => {
Expand Down Expand Up @@ -76,10 +76,10 @@ const Home = (): JSX.Element => {

if (createPollResponse.statusCode === 201) {
if (typeof window !== "undefined") {
const kukkeeCreatedPolls = localStorage.getItem("kukkeeCreatedPolls");
const samayCreatedPolls = localStorage.getItem("samayCreatedPolls");

if (!kukkeeCreatedPolls) {
const initKukkeeCreatedPolls = {
if (!samayCreatedPolls) {
const initSamayCreatedPolls = {
polls: [
{
[`${createPollResponse.data._id}-${pollTitle}`]: `${encryptedSecret}`,
Expand All @@ -88,19 +88,19 @@ const Home = (): JSX.Element => {
};

localStorage.setItem(
"kukkeeCreatedPolls",
JSON.stringify(initKukkeeCreatedPolls)
"samayCreatedPolls",
JSON.stringify(initSamayCreatedPolls)
);
} else {
let kukkeeCreatedPollsJSON = JSON.parse(kukkeeCreatedPolls);
let samayCreatedPollsJSON = JSON.parse(samayCreatedPolls);

kukkeeCreatedPollsJSON.polls.push({
samayCreatedPollsJSON.polls.push({
[`${createPollResponse.data._id}-${pollTitle}`]: `${encryptedSecret}`,
});

localStorage.setItem(
"kukkeeCreatedPolls",
JSON.stringify(kukkeeCreatedPollsJSON)
"samayCreatedPolls",
JSON.stringify(samayCreatedPollsJSON)
);
}
}
Expand All @@ -121,26 +121,26 @@ const Home = (): JSX.Element => {
return (
<>
<Head>
<title>Kukkee — Meeting poll tool</title>
<title>Samay — Meeting poll tool</title>
<link rel="shortcut icon" href="/favicon.svg" />
<meta charSet="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="title" content="Kukkee — Meeting poll tool" />
<meta name="title" content="Samay — Meeting poll tool" />
<meta
name="description"
content="Free and open source meeting poll tool. Quickly find a time which works for everyone without the back-and-forth texts/emails!"
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://kukkee.com" />
<meta property="og:title" content="Kukkee — Meeting poll tool" />
<meta property="og:url" content="https://samay.app" />
<meta property="og:title" content="Samay — Meeting poll tool" />
<meta
property="og:description"
content="Free and open source meeting poll tool. Quickly find a time which works for everyone without the back-and-forth texts/emails!"
/>
<meta property="og:image" content="/banner.png" />
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content="https://kukkee.com" />
<meta property="twitter:title" content="Kukkee — Meeting poll tool" />
<meta property="twitter:url" content="https://samay.app" />
<meta property="twitter:title" content="Samay — Meeting poll tool" />
<meta
property="twitter:description"
content="Free and open source meeting poll tool. Quickly find a time which works for everyone without the back-and-forth texts/emails!"
Expand All @@ -151,7 +151,7 @@ const Home = (): JSX.Element => {
<div className="global-page-section">
<Container className="global-container">
<Jumbotron className="new-poll-timeslot-jumbo">
<KukkeeRBC pollTimes={pollTimes} setTimes={setTimes} />
<SamayRBC pollTimes={pollTimes} setTimes={setTimes} />
</Jumbotron>
<Jumbotron className="new-poll-jumbo">
<Row>
Expand Down
Loading
Loading