diff --git a/src/api/endpoints.ts b/src/api/endpoints.ts
index 37e3348b86..0ce51e9a51 100644
--- a/src/api/endpoints.ts
+++ b/src/api/endpoints.ts
@@ -81,6 +81,7 @@ export default [
 	{ name: 'following/create', shouldBeSignin: true, limitDuration: hour, limitMax: 100, kind: 'following-write' },
 	{ name: 'following/delete', shouldBeSignin: true, limitDuration: hour, limitMax: 100, kind: 'following-write' },
 
+	{ name: 'posts',                  shouldBeSignin: false },
 	{ name: 'posts/show',             shouldBeSignin: false },
 	{ name: 'posts/replies',          shouldBeSignin: false },
 	{ name: 'posts/context',          shouldBeSignin: false },
diff --git a/src/api/endpoints/posts.js b/src/api/endpoints/posts.js
index 9bc25315a7..59cfb8a441 100644
--- a/src/api/endpoints/posts.js
+++ b/src/api/endpoints/posts.js
@@ -15,6 +15,22 @@ import serialize from '../serializers/post';
 module.exports = (params) =>
 	new Promise(async (res, rej) =>
 {
+	// Get 'include_replies' parameter
+	let includeReplies = params.include_replies;
+	if (includeReplies === true) {
+		includeReplies = true;
+	} else {
+		includeReplies = false;
+	}
+
+	// Get 'include_reposts' parameter
+	let includeReposts = params.include_reposts;
+	if (includeReposts === true) {
+		includeReposts = true;
+	} else {
+		includeReposts = false;
+	}
+
 	// Get 'limit' parameter
 	let limit = params.limit;
 	if (limit !== undefined && limit !== null) {
@@ -52,6 +68,14 @@ module.exports = (params) =>
 		};
 	}
 
+	if (!includeReplies) {
+		query.reply_to_id = null;
+	}
+
+	if (!includeReposts) {
+		query.repost_id = null;
+	}
+
 	// Issue query
 	const posts = await Post
 		.find(query, {
diff --git a/src/web/app/common/tags/index.js b/src/web/app/common/tags/index.js
index 90f03825e2..58027d4e9b 100644
--- a/src/web/app/common/tags/index.js
+++ b/src/web/app/common/tags/index.js
@@ -24,3 +24,4 @@ require('./messaging/message.tag');
 require('./messaging/index.tag');
 require('./messaging/form.tag');
 require('./stream-indicator.tag');
+require('./public-timeline.tag');
diff --git a/src/web/app/common/tags/public-timeline.tag b/src/web/app/common/tags/public-timeline.tag
new file mode 100644
index 0000000000..1bc18e5a8a
--- /dev/null
+++ b/src/web/app/common/tags/public-timeline.tag
@@ -0,0 +1,80 @@
+<mk-public-timeline>
+	<article each={ posts }>
+		<img src={ user.avatar_url + '?thumbnail&size=64' } alt="avatar"/>
+		<div>
+			<header>
+				<span class="name">{ user.name }</span>
+				<span class="username">@{ user.username }</span>
+			</header>
+			<div class="body">
+				<div class="text">{ text }</div>
+			</div>
+		</div>
+	</article>
+	<style>
+		:scope
+			display block
+
+			> article
+				padding 28px
+				border-bottom solid 1px #eee
+
+				&:last-child
+					border-bottom none
+
+				> img
+					display block
+					position absolute
+					width 58px
+					height 58px
+					margin 0
+					border-radius 100%
+					vertical-align bottom
+
+				> div
+					min-height 58px
+					padding-left 68px
+
+					> header
+						margin-bottom 2px
+
+						> .name
+							margin 0 .5em 0 0
+							padding 0
+							color #777
+
+						> .username
+							margin 0 .5em 0 0
+							color #ccc
+
+					> .body
+						> .text
+							cursor default
+							display block
+							margin 0
+							padding 0
+							overflow-wrap break-word
+							font-size 1.1em
+							color #717171
+
+	</style>
+	<script>
+		this.mixin('api');
+
+		this.posts = [];
+		this.isFetching = true;
+
+		this.on('mount', () => {
+			this.api('posts', {
+				limit: 5,
+				include_reposts: false,
+				include_replies: false
+			}).then(posts => {
+				this.update({
+					isFetching: false,
+					posts: posts
+				});
+			});
+		});
+	</script>
+</mk-public-timeline>
diff --git a/src/web/app/desktop/tags/pages/entrance.tag b/src/web/app/desktop/tags/pages/entrance.tag
index 0146379336..c6f0f5c90e 100644
--- a/src/web/app/desktop/tags/pages/entrance.tag
+++ b/src/web/app/desktop/tags/pages/entrance.tag
@@ -1,5 +1,6 @@
 <mk-entrance>
-	<main><img src="/resources/title.svg" alt="Misskey"/>
+	<main>
+		<img src="/resources/title.svg" alt="Misskey"/>
 		<mk-entrance-signin if={ mode == 'signin' }></mk-entrance-signin>
 		<mk-entrance-signup if={ mode == 'signup' }></mk-entrance-signup>
 		<div class="introduction" if={ mode == 'introduction' }>
@@ -8,6 +9,10 @@
 		</div>
 	</main>
 	<mk-forkit></mk-forkit>
+	<section class="tl">
+		<h2>投稿を見てみよう</h2>
+		<mk-public-timeline></mk-public-timeline>
+	</section>
 	<footer>
 		<mk-copyright></mk-copyright>
 	</footer>
@@ -26,6 +31,7 @@
 
 			> main
 				display block
+				padding-bottom 16px
 
 				> img
 					display block
@@ -53,6 +59,21 @@
 						&:hover
 							text-decoration underline
 
+			> .tl
+				padding 32px 0
+				background #fff
+
+				> h2
+					display block
+					margin 0
+					padding 0
+					text-align center
+					font-size 20px
+					color #5b6b73
+
+				> mk-public-timeline
+					max-width 500px
+					margin 0 auto
 			> footer
 				> mk-copyright
 					margin 0