diff --git a/app/components/proposal-list/item/component.js b/app/components/proposal-list/item/component.js
new file mode 100644
index 0000000..66c000e
--- /dev/null
+++ b/app/components/proposal-list/item/component.js
@@ -0,0 +1,29 @@
+import Component from '@ember/component';
+import tag from 'ember-awesome-macros/tag';
+import { computed } from '@ember/object';
+import { reads } from '@ember/object/computed';
+import { inject } from '@ember/service';
+
+export default Component.extend({
+ kredits: inject(),
+
+ tagName: 'li',
+ classNames: ['proposal-list-item'],
+
+ attributeBindings: ['data-proposal-id', 'title'],
+
+ title: tag`(${'proposal.kind'}) ${'proposal.description'}`,
+ 'data-proposal-id': reads('proposal.id'),
+
+ canBeVoted: computed('voterIds.[]', 'kredits.currentUser', function() {
+ let { isExecuted, voterIds } = this.proposal;
+ let { currentUser } = this.kredits;
+ voterIds = voterIds.map((id) => id.toString());
+
+ return currentUser.isCore && !isExecuted && !voterIds.includes(currentUser.id);
+ }),
+
+ selected: computed('selectedProposals.[]', function() {
+ return this.selectedProposals.includes(this.proposal.id);
+ })
+});
diff --git a/app/components/proposal-list/item/template.hbs b/app/components/proposal-list/item/template.hbs
new file mode 100644
index 0000000..75ab52e
--- /dev/null
+++ b/app/components/proposal-list/item/template.hbs
@@ -0,0 +1,8 @@
+♥
+{{proposal.amount}}₭S
+for {{proposal.contributor.name}}
+({{proposal.votesCount}}/{{proposal.votesNeeded}} votes)
+
+{{#if canBeVoted}}
+
+{{/if}}